从Func 到Func 的转换工作但到Func 失败
我有以下代码:
static Func s_objToString = (x) => x.ToString(); static Func s_stringToString = s_objToString; //compiles static Func s_intToString = s_objToString; //error
第二行编译,但第三行无法编译错误:
无法将类型’
System.Func
‘隐式转换为’System.Func
‘
这是为什么?
我理解,虽然字符串是从对象派生的,但是List
并不是从List
派生的,但是这里object
是string
工作而object
是int
失败,为什么呢?
好吧,让我说我理解为什么; 现在的问题是有一种解决方法(其他然后定义MyInt
类到框int
因为Func
到Func
工作)?
这是因为Func
被定义为Func
,MSDN就在这里 ,所以T
是with -variant with in
keyword,也就是说,你可以使用你指定的类型或任何派生类型较少的类型,但是请记住, 协方差和反方差不支持值类型 :
为什么协方差和逆变不支持值类型
因此,它适用于string
但不适用于int
。 您可能需要阅读有关协方差和逆变的更多信息:
因为co / contra-variance对值类型不起作用。
请看这里
仅当类型参数是引用类型时才支持差异。 值类型不支持差异。
以下内容无法编译:
// int is a value type, so the code doesn't compile. IEnumerable