sco*_*obi 5 .net c# covariance contravariance c#-4.0
我不明白为什么'x'在下面会转换,但'y'和'z'不会.
var list = new List<List<int>>();
IEnumerable<List<int>> x = list;
List<IEnumerable<int>> y = list;
IEnumerable<IEnumerable<int>> z = list;
Run Code Online (Sandbox Code Playgroud)
新的协方差特征是否不适用于泛型的泛型,或者我做错了什么?(我想避免使用.Cast <>来使y和z工作.)
"z"在C#4.0中很好,IEnumerable<T>是协变的. List<T>然而,不是,你不能使"y"工作.
直观地说,如果是,那么这将是有效的:
List<IEnumerable<int>> y = list
y.Add(new Stack<int>());
Run Code Online (Sandbox Code Playgroud)
这打破了"list"只能包含List<int>元素的承诺.