首页 >后端开发 >C++ >为什么将'IEnumerable”转换为'IEnumerable”时,'Enumerable.Cast”会抛出'InvalidCastException”?

为什么将'IEnumerable”转换为'IEnumerable”时,'Enumerable.Cast”会抛出'InvalidCastException”?

Barbara Streisand
Barbara Streisand原创
2025-01-10 09:57:41690浏览

Why Does `Enumerable.Cast` Throw an `InvalidCastException` When Casting `IEnumerable` to `IEnumerable`?

理解 C# 中的 Enumerable.CastInvalidCastException

使用 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 方法对每个项目执行从 intlong 的转换,避免装箱问题。 这种直接转换规避了 Enumerable.Cast<T> 在处理值类型转换时的限制。

以上是为什么将'IEnumerable”转换为'IEnumerable”时,'Enumerable.Cast”会抛出'InvalidCastException”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn