我不明白为什么下面的“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/