"z" - это хорошо в C # 4.0, IEnumerable<T>
- ковариантный. List<T>
однако нет, вы не можете заставить работать "y".
Интуитивно, если бы это было так, это было бы верно:
List<IEnumerable<int>> y = list
y.Add(new Stack<int>());
Что нарушает обещание, что «список» может содержать только List<int>
элементов.