c# – 如何确定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
}

因为他们的签名是平等的。谁能帮助我?

你可以使用typeof operator与泛型类型,因此typeof(T)将获得对应于T的Type引用,然后使用IsValueType属性:

if (typeof(T).IsValueType)

或者如果要包括可空值类型,就像它们是引用类型一样:

// Only true if T is a reference type or nullable value type
if (default(T) == null)
http://stackoverflow.com/questions/7580288/how-to-determine-whether-t-is-a-value-type-or-reference-class-in-generic

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何确定T是一个值类型还是引用类在泛型?