4
为什么协方差和逆方差不支持值类型
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中进行了解释: 方差仅适用于引用类型;如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型而言是不变的。 我搜索后发现,提到的一些问题的原因是值类型和引用类型之间的装箱。但这仍不能使我清楚为何拳击是原因? 有人可以给出一个简单而详细的解释,为什么协变量和协变量不支持值类型,以及装箱如何影响值类型?