C#4的协方差是否支持泛型的嵌套?

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工作.)

Han*_*ant 7

"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>元素的承诺.