【发布时间】:2012-10-12 05:52:22
【问题描述】:
我有一个通用函数需要测试传入它的对象是否为空。但是因为它是泛型类型,编译器不知道传递的是类还是结构。因此,我无法测试 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
}
}
出于同样的原因,这也不起作用。我希望有人可以提出一种可行的方法。
【问题讨论】:
-
究竟什么是“空”对象?
-
+1 反对反对票。这是一个重复的问题,但这是一个很好的问题。
-
感谢您的链接,那里有很多很好的信息
-
您实际上可以测试 null,但如果是结构体,该测试将始终返回 false。
标签: c# generics reflection