Tag: C# 4.0

为什么协变和逆变不支持价值types

IEnumerable<T>是co-variant,但不支持值types,只是引用types。 下面的简单代码编译成功: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; 但是从string为int会得到编译错误: IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; 原因在MSDN中解释: 差异仅适用于参考types; 如果为变体types参数指定值types,则该types参数对于生成的构造types是不变的。 我search了一下,发现有些问题提到了原因是值types和引用types之间的装箱 。 但是,为什么拳击就是这个原因,这并不能说明我的心意? 有人能给一个简单和详细的解释,为什么协变和逆变不支持价值types, 拳击如何影响这个?

任务和线程有什么区别?

在C#4.0中,我们在System.Threading.Tasks命名空间中有Task 。 Thread和Task之间真正的区别是什么? 我做了一些示例程序(来自MSDN的帮助)为我自己学习 Parallel.Invoke Parallel.For Parallel.ForEach 但是这个想法还不是很清楚,所以有很多疑问。 我最初在Stackoverflow中搜索类似的问题,但可能与这个问题标题我不能得到相同的。 如果有人知道前面发布的同类问题,请给出链接的参考。

扩展方法和动态对象

我将总结我的问题到下面的代码片段。 List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 }; Console.WriteLine(list.First()); 上面的代码工作正常。 现在我尝试了以下 dynamic dList = list; Console.WriteLine(dList.First()); 但我得到RuntimeBinderException.Why是这样吗?