为什么不能在c#?List<string>
中分配给List<object>
直接分配给AList<string>
>变量会导致编译器错误。 不允许隐式转换,并且使用List<object>
>明确铸造也失败了。(List<object>)
>
原因:>
>此限制是由于类型安全。 想象一下,如果允许这样的任务。然后,您可以将其他类型的对象(例如,整数或自定义类)以外的类型添加到>中。 但是,此string
最初是List<object>
。 尝试使用List<object>
参考访问此列表的元素时,遇到非弦乐元素时会导致AList<string>
。 编译器通过不称呼分配来防止这种潜在的运行时错误。string
>
System.InvalidCastException
虽然无法直接分配,但您可以使用替代方法实现所需的效果:
最简单的方法是通过>迭代,并单独添加每个元素。
List<string>
List<object>
Cast<T>
<code class="language-csharp">List<string> stringList = new List<string> { "apple", "banana", "cherry" }; List<object> objectList = stringList.Cast<object>().ToList();</code>
到 - 是另一回事。 除非您绝对确定>中的每个元素实际上都是
>,否则这通常是不允许的。 在不正确的情况下尝试铸造将导致运行时例外。 C#强制类型安全以防止这种情况。 您需要执行检查或使用Linq的方法来安全过滤和施放字符串元素。List<object>
因此,尽管反向操作似乎是类似的,但C#中的基本类型安全机制阻止了它是直接的操作。 仔细考虑元素类型在使用通用列表和类型转换时至关重要。List<string>
>
以上是为什么不能将`列表'直接分配到c#中的列表变量)?的详细内容。更多信息请关注PHP中文网其他相关文章!