Как определить, является ли T типом значения или ссылочным классом в универсальном?

У меня есть общий метод, поведение которого зависит от T - ссылочный тип или тип значения. Выглядит это так:

T SomeGenericMethod <T> (T obj)
{
  if (T is class) //What condition I must write in the brackets?
   //to do one stuff
  else //if T is a value type like struct, int, enum and etc.
   //to do another stuff
}

Я не могу дублировать этот метод, например:

T SomeGenericMethod <T> (T obj) where T : class
{
 //Do one stuff
}

T SomeGenericMethod <T> (T obj) where T : struct
{
 //Do another stuff
}

, потому что их подписи равны. Кто-нибудь может мне помочь?

47
задан Vasya 28 September 2011 в 08:23
поделиться