2009-08-05 103 views
6

我有这样一个通用的方法:不能从泛型方法返回'null'?

public T GetLevelElement<T>(string name) where T : ILevelElement 
{ 
    //[...] 
} 

在DB这基本上执行查找,并在某些情况下,它不会(也不能返回)的结果,我想返回null。

但是,这显然是不可能的,因为'在T和空之间没有隐式转换'。在这种情况下我该怎么办?

回答

24

T不能为空,因为T可能是一个值类型。尝试返回缺省值(T)或添加类约束,以指示T能够仅是像这样的引用类型:

public T GetLevelElement<T>(string name) where T : ILevelElement, class 
{ 
    [...] 
} 
+3

至少在.NET 3.5中,上面应该是'... where T:class,ILevelElement'。编译器扼流圈因为它希望'class'关键字是第一个。 – 2011-02-21 15:30:10

0

达斯汀坎贝尔是正确的。另一种解决方案是返回default(T)

+0

哦。我没有看到他已经告诉过你关于默认关键字的信息。忽略我的答案。 – 2013-11-21 17:55:44