标题说全部。如果我有一个字段
private Predicate<object> myPredicate;
为什么我不能分配
Predicate<T>
那个领域的实例?
答案 0 :(得分:3)
因为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
参数)!