协方差和反方差不支持值类型的原因IEnumerable<T>是协变但它不支持值类型,只支持引用类型。成功编译了以下简单代码:IEnumerable<string> strList = new List<string>();IEnumerable<object> objList = strList;但从string到int将得到编译错误:IEnumerable<int> intList = new List<int>();IEnumerable<object> objList = intList;原因在MSDN:方差仅适用于引用类型;如果为变量类型参数指定值类型,则该类型参数对于结果构造的类型是不变的。我查了一下,发现提到的一些问题的原因是值类型与引用类型之间的装箱..但是它仍然没有让我头脑清醒很多,为什么拳击是原因?请有人给出一个简单而详细的解释,为什么协方差和反方差不支持值类型,以及如何拳击影响这个?
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
LSP
如果Q(X)是关于T型对象x的一个可证明的性质,那么对于S类型的对象y,Q(Y)应该是真的,其中S是T的一个子类型。
int
object
C#
int myInt = new int();object obj1 = myInt ;object obj2 = myInt ;return ReferenceEquals(obj1, obj2);
false
- 3 回答
- 0 关注
- 461 浏览
添加回答
举报
0/150
提交
取消