【发布时间】:2010-09-23 01:24:57
【问题描述】:
我有一个使用这个(虚拟)代码的通用方法(是的,我知道 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)'。"
我可以避免这个错误吗?
【问题讨论】:
-
现在可以为空的引用类型(在 C# 8 中)是更好的解决方案吗? docs.microsoft.com/en-us/dotnet/csharp/nullable-references 返回
null,无论T是Object还是int还是char。 -
太糟糕了,签名中的
T?不起作用。 @Alexander-ReinstateMonica 我读过这篇文章,但无论引用或值类型如何,都找不到返回null的方法。 -
@mireazma 信息太少,我无法提供帮助。您应该提出一个新问题。
-
我看到的主要问题是您尝试使用
null来表示那里有问题。我建议改为抛出异常。这就是存在异常的原因,您可以在任何地方省略if (... != null)。