Roe*_*sim 4 c# generics func covariance contravariance
我有以下代码:
static Func<object, string> s_objToString = (x) => x.ToString();
static Func<string, string> s_stringToString = s_objToString; //compiles
static Func<int, string> s_intToString = s_objToString; //error
Run Code Online (Sandbox Code Playgroud)
第二行编译但第三行无法编译并出现错误:
无法隐式将类型'
System.Func<object,string>' 转换为'System.Func<int,string>'
这是为什么?
据我所知,遗传学,尽管字符串是从对象派生List<string>不会得到List<object>,但在这里object,以string作品和object以int失败了,为什么?
好吧,让我说我理解为什么; 现在的问题是有办法解决它(其他然后定义MyInt类框int,因为Func<object,string>对Func<MyInt,string>作品)?
这是因为Func定义为 Func<in T, out TResult>,MSDN在这里,所以与关键字T是反变量的in,也就是说,你可以使用你指定的类型或任何类型较少的类型,但要记住共方差和反方差不支持价值类型:
所以,它适用string但不起作用int.您可能需要阅读有关协方差和逆变的更多信息:
http://msdn.microsoft.com/en-us/library/dd233060.aspx
http://msdn.microsoft.com/en-us/library/dd799517.aspx
| 归档时间: |
|
| 查看次数: |
1657 次 |
| 最近记录: |