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

标签 c# generics

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

    static T FindThing<T>(IList collection, int id) where T : IThing, new()
    {
        foreach (T thing in collection)
        {
            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.
    }

这给我一个构建错误

"Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead."

我可以避免这个错误吗?

最佳答案

三个选项:

  • 返回 default(或 default(T) 用于旧版本的 C#),这意味着如果 T,您将返回 null 是引用类型(或可空值类型),0int'\0'char 等 ( Default values table (C# Reference) )
  • 如果您愿意使用 where T : class 约束将 T 限制为引用类型,然后照常返回 null
  • 如果您乐于使用 where T : struct 约束将 T 限制为不可空值类型,那么您可以再次返回 null 与返回值 T? 的方法一样正常 - 请注意,这不是返回 null 引用,而是可为 null 值类型的 null 值.

关于c# - 如何从 C# 中的泛型方法返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302096/

相关文章:

C# 将对象转换为具有 Type 参数的通用接口(interface)

java - 使用静态方法泛型时不兼容的类型

c# - 当用户绘制的控件大小增加时,新区域不会重新绘制

c# - SQL CLR Web 服务调用 : Limiting Overhead

Java 泛型 : Object Mapper Converting JSON to Java Object

java - 无法解决 REST API 中的一般错误

c# - 打开并使用 TCP 端口

c# - 一个 MVC Controller 类可以有多个 IEnumerable 吗?

c# - 编写 MSMQ 示例应用程序所需的最低限度

c# - 正确获取泛型类的泛型类的约束