小编典典

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

all

我有一个使用这个(虚拟)代码的通用方法(是的,我知道 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)’。”

我可以避免这个错误吗?


阅读 198

收藏
2022-03-06

共1个答案

小编典典

两种选择:

  • Returndefault(T)这意味着null如果 T 是引用类型(或可为空的值类型)、0for int'\0'forchar等,您将返回。(默认值表(C# 参考)
  • 将 T 限制为具有where T : class约束的引用类型,然后null正常返回
2022-03-06