转换 IEnumerable到 IEnumerable失败

发布于 2024-10-07 13:55:35 字数 371 浏览 5 评论 0原文

可能的重复:
令人费解的 Enumerable.Cast InvalidCastException

为什么会

List<long> numbers = Enumerable.Range(1, 9999).Cast<long>().ToList();

因 InvalidCastException 而失败?

Possible Duplicate:
Puzzling Enumerable.Cast InvalidCastException

Why does

List<long> numbers = Enumerable.Range(1, 9999).Cast<long>().ToList();

fail with an InvalidCastException?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁轨上的流浪者 2024-10-14 13:55:35

请参阅此答案: 令人困惑的 Enumerable.Cast InvalidCastException

总之,Cast() 适用于非generic IEnumerable,它将每个 int 包装为一个对象。因此,当调用 Cast 时,它只能将元素视为 Object 类型,而不能将其转换为 long。

解决方案是使用 Select 对每个强类型元素执行显式转换:

var numbers = Enumerable.Range(1,9999).Select(i=>(long)i).ToList();

See this answer: Puzzling Enumerable.Cast InvalidCastException

In summary, Cast() works on the non-generic IEnumerable, which boxes each int as an Object. So, when the Cast is called it can only treat the elements as being of type Object, which cannot be cast to long.

The solution is to use Select to perform an explicit cast of each strongly-typed element:

var numbers = Enumerable.Range(1,9999).Select(i=>(long)i).ToList();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文