将 IEnumerable<int> 转换为 IEnumerable<long> 失败[重复]

问题描述 投票:0回答:1

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

为什么

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

因 InvalidCastException 失败?

c# casting extension-methods
1个回答
15
投票

看到这个答案:令人困惑的Enumerable.Cast InvalidCastException

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

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

var numbers = Enumerable.Range(1,9999).Select(i=>(long)i).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.