相关疑难解决方法(0)

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

IEnumerable<T>共变体,但它不支持值类型,仅支持引用类型.以下简单代码编译成功:

IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
Run Code Online (Sandbox Code Playgroud)

但是从更改stringint将得到编译错误:

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
Run Code Online (Sandbox Code Playgroud)

原因在MSDN中解释:

差异仅适用于参考类型; 如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型是不变的.

我搜索过并发现有些问题提到的原因是值类型和引用类型之间的装箱.但它仍然不清楚我的想法为什么拳击是什么原因?

有人可以给出一个简单而详细的解释为什么协方差和逆变不支持值类型以及拳击如何影响这个?

.net c# covariance contravariance c#-4.0

144
推荐指数
3
解决办法
8497
查看次数

为什么拆箱需要在C#中进行显式转换?

Boxing是将值类型转换为托管堆对象的过程,这是隐式的.拆箱是反向过程,编译器需要显式转换.由于拳击存储数据类型,为什么不能拆箱使用它而不是要求显式转换?

class BoxUnBox
{
 static void Main()
 {
   int i = 123;      // a value type
   object o = i;     // boxing
   int j = (int)o;   // unboxing - Why is an explicit cast required?
 }
}
Run Code Online (Sandbox Code Playgroud)

c# unboxing casting

19
推荐指数
3
解决办法
2598
查看次数

标签 统计

c# ×2

.net ×1

c#-4.0 ×1

casting ×1

contravariance ×1

covariance ×1

unboxing ×1