可能重复:
如何将泛型类型与其默认值进行比较?
我有一个通用函数,需要测试传递给它的对象是否为空。但是因为它是泛型类型,编译器不知道传递的是类还是结构。因此,我无法测试 null 我必须测试类型是否为空。
public virtual void SetFocusedObject(T obj)
{
//since we dont know if T is a class or a struct test against default
T defaultT = default(T);
if(obj != defaultT)
{
//code
}
}
这不起作用,因为编译器不知道 T 是什么才能编译测试
或者我也尝试了以下
public virtual void SetFocusedObject(T obj)
{
//since we dont know if T is a class or a struct test against empty type
T defaultT = T.GetConstructor(T.EmptyTypes).Invoke(null);
if(obj != defaultT)
{
//code
}
}
出于同样的确切原因,这也不起作用。我希望有人可以提出一种可行的方法。