不能从泛型方法返回'null'?

Jör*_*ann 6 .net c# generics

我有一个通用的方法,如:

public T GetLevelElement<T>(string name) where T : ILevelElement
{
    //[...]
}
Run Code Online (Sandbox Code Playgroud)

这基本上在db中执行查找,在某些情况下它不会(并且不能返回)结果,我想返回null.

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

Dus*_*ell 25

T不能为null,因为T可以是值类型.尝试返回默认值(T)或添加类约束以指示T只能是这样的引用类型:

public T GetLevelElement<T>(string name) where T : ILevelElement, class
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

  • 至少在.NET 3.5中,上面应该是`...其中T:class,ILevelElement`.编译器因为希望`class`关键字是第一个而扼流圈. (3认同)