【发布时间】:2020-01-07 15:20:20
【问题描述】:
我有这个代码:
public T? Foo<T>()
where T : class?
{
return null;
}
它给出了一个符合逻辑和预期的错误:
必须知道可空类型参数是值类型或不可空引用类型。考虑添加“类”、“结构”或类型约束。
现在我再添加一个约束:
public T? Foo<T>()
where T : class?, IDisposable // Could be any interface I guess
{
return null;
}
现在有趣的是,错误刚刚消失了。虽然在我看来我们确实存在相互冲突的约束,因为接口是 non-nullalbe 而 class? 是。
我在这里遗漏了什么还是编译器有问题?
【问题讨论】:
-
你需要
IDisposable?。是的,这令人困惑。 -
你见过这个吗? -> stackoverflow.com/questions/55975211/…
-
是的,我用
?进行了测试,它可以编译。具有讽刺意味的是,它也像where T : class, IDisposable?那样编译 -
如果至少有一个约束不可为空,则似乎整个约束不可为空
-
@IlyaChernomordik 听起来很有说服力,因为约束是与连接的。
标签: c# generics nullable-reference-types