gpt4 book ai didi

c# - C# 中泛型列表的类型转换

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

我想弄清楚为什么类型转换在第一种情况下是不可能的,但在第二种情况下是可能的。请看下面的代码:

var strList = new List<string>{"One", "Two", "Three"};
List<object> objList = (List<object>) strList; // <<<< why is not converted? - Case 1

IEnumerable<object> ienumList = strList; // <<<< why is converted? - Case 2

最佳答案

虽然 comment referring to covariance and contravariance把基本原理讲得很好,我将根据所呈现案例的具体效果来回答:

List<object> objList = (List<object>) strList;

objList是可写的。它将允许您这样做:

objList.Add(new Object());

然而,objList仍然是与 strList 相同的实例.您刚刚添加了一个 System.Object 的实例到 List<string> !

编译器不允许这种情况发生。因此,一个 List<string>不能转换为 List<object> .

另一方面,在第二种情况下,您检索一个可枚举的:

IEnumerable<object> ienumList = strList;

无法修改结果枚举,如IEnumerable<T>不提供任何改变实例的成员。因此,类型参数 T可以(并且是)标有 out关键字,它允许呈现的类型转换。

关于c# - C# 中泛型列表的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806770/

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