我如何从C#中的泛型方法返回NULL?

我有一个这个(虚拟)代码的通用方法(是的,我知道IList有谓词,但我的代码不使用IList,但其他一些集合,无论如何,这是不相关的问题...)

static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach T thing in collecion
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead.
}

这给我一个构建错误

“无法将null转换为类型参数'T',因为它可能是一个值类型,请考虑使用'default(T)'。”

我可以避免这个错误吗?


两种选择:

  • 返回default(T) ,这意味着如果T是引用类型(或可为空值类型),则返回null ,对于int为0,对于char等为' 0'
  • 将T限制为where T : class约束的引用类型,然后正常返回null

  • return default(T);
    

    你可以调整你的约束:

    where T : class, IDisposable
    

    然后返回null是允许的。

    链接地址: http://www.djcxy.com/p/35359.html

    上一篇: How can I return NULL from a generic method in C#?

    下一篇: How to Implement DOM Data Binding in JavaScript