gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:55:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com