gpt4 book ai didi

c# - 当 T 是对象的后代时,为什么不能将 Predicate 分配给 Predicate
转载 作者:太空宇宙 更新时间:2023-11-03 23:19:11 26 4
gpt4 key购买 nike

标题说明了一切。如果我有一个字段

private Predicate<object> myPredicate;  

为什么我不能分配一个

Predicate<T>

那个领域的实例?

最佳答案

因为 Predicate<in T> 实现逆变。这样你就可以

Predicate<string> predString;
Predicate<object> predObject = (object x) => x != null;
predString = predObject;

但不是相反。

参见 https://msdn.microsoft.com/en-us/library/ee207183.aspx

如果你想一想,这是合乎逻辑的......在我给出的例子中,

bool result = predString("Foo");

"Foo"string 的有效参数(一个 predObject ) (接受 object )。

反之则不行:

非法代码

Predicate<object> predObject;
Predicate<string> predString = (string x) => x.Length != 0;
predObject = predString;

然后

bool result = predObject(new object());

很明显new object()predString 的非法参数(这需要一个 string 参数)!

关于c# - 当 T 是对象的后代时,为什么不能将 Predicate<T> 分配给 Predicate<object>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036412/

26 4 0