理解 C# 中的 Enumerable.Cast
和 InvalidCastException
使用 Enumerable.Cast<T>
将 IEnumerable<int>
转换为 IEnumerable<long>
时会出现常见的 C# 错误。 尽管表面上存在类型兼容性,但还是出现了意外的 InvalidCastException
。
原因在于Enumerable.Cast<T>
的功能。 它不是通用集合的专用方法;它在 IEnumerable
级别运行,使用未装箱的值。
因此,当从 IEnumerable<int>
投射元素时,每个 int
已经被装箱为 object
。 尝试将盒装 int
转换为 long
直接失败,导致 InvalidCastException
.
解决方案是显式转换查询中的每个元素:
<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>
此 Select
方法对每个项目执行从 int
到 long
的转换,避免装箱问题。 这种直接转换规避了 Enumerable.Cast<T>
在处理值类型转换时的限制。
以上是为什么将'IEnumerable”转换为'IEnumerable”时,'Enumerable.Cast”会抛出'InvalidCastException”?的详细内容。更多信息请关注PHP中文网其他相关文章!