从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派生的,但是这里objectstring工作而objectint失败,为什么呢?

好吧,让我说我理解为什么; 现在的问题是有一种解决方法(其他然后定义MyInt类到框int因为FuncFunc工作)?

这是因为Func被定义为Func ,MSDN就在这里 ,所以T是with -variant with in keyword,也就是说,你可以使用你指定的类型或任何派生类型较少的类型,但是请记住, 协方差和反方差不支持值类型

为什么协方差和逆变不支持值类型

因此,它适用于string但不适用于int 。 您可能需要阅读有关协方差和逆变的更多信息:

http://msdn.microsoft.com/en-us/library/dd233060.aspx

http://msdn.microsoft.com/en-us/library/dd799517.aspx

因为co / contra-variance对值类型不起作用。

请看这里

仅当类型参数是引用类型时才支持差异。 值类型不支持差异。
以下内容无法编译:

 // int is a value type, so the code doesn't compile. IEnumerable objects = new List(); // Compiler error here.