Ily*_*dik 4 c# generics nullable-reference-types
我有这个代码:
public T? Foo<T>()
where T : class?
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
它给出了一个符合逻辑和预期的错误:
可以为 null 的类型参数必须是值类型或不可为 null 的引用类型。考虑添加“类”、“结构”或类型约束。
现在我再添加一个约束:
public T? Foo<T>()
where T : class?, IDisposable // Could be any interface I guess
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
现在有趣的是,错误刚刚消失。尽管在我看来我们确实存在相互冲突的约束,因为接口是non-nullalbewhileclass?是。
我在这里遗漏了什么还是编译器有问题?
泛型类型约束where T : IDisposable意味着“T必须不可为空且必须实现IDisposable”。如果您有多个具有不同可空性的泛型类型约束,则只有当所有约束都可以为空时,该约束才可以为空。
因此,可以class?为空的事实IDisposable被不可为空的事实所覆盖。
你需要where T : class?, IDisposable?.