c# - C# 4 的协变是否支持泛型的嵌套?

标签 c# .net c#-4.0 covariance contravariance

我不明白为什么下面的“x”会转换,但“y”和“z”不会。

var list = new List<List<int>>();

IEnumerable<List<int>> x = list;
List<IEnumerable<int>> y = list;
IEnumerable<IEnumerable<int>> z = list;

新的协方差特性是对泛型的泛型不起作用还是我做错了什么? (我想避免使用 .Cast<> 来使 y 和 z 工作。)

最佳答案

“z”在 C# 4.0 中没问题,IEnumerable<T>是协变的。 List<T>然而不是,你不能让“y”工作。

直觉上,如果是那么这将是有效的:

List<IEnumerable<int>> y = list
y.Add(new Stack<int>());

这违反了“列表”只能包含 List<int> 的 promise 元素。

关于c# - C# 4 的协变是否支持泛型的嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684597/

相关文章:

c# - 如何让 CLR 知道从 GAC 选择哪个程序集?

c# - 如何在 C# 中从 System.Array 转换为 object[]

c# - 有人可以用简单的英语或伪代码解释三元运算符吗?

c# - 包含 Microsoft.Web.Mvc dll 后,Html.RenderAction 不可用

c# - ListBox Groupstyle 显示 : How to design a group name?

c# - 是否有一个 Form 事件在将任何内容绘制到屏幕上之前被调用?

.net - 如何发现哪个图像文件是 Windows 上的当前桌面背景?

c# - 如何检测 Windows 设备是否支持触控

c# - VB.NET下的Late Binding Magic转换为C#

c# - C# 中的任何 Visual Basic 'With' 模拟?