将IEnumerable <int>转换为IEnumerable <long>失败</long> </int>

时间:2010-12-13 21:28:15

标签: c# casting extension-methods

  

可能重复:
  Puzzling Enumerable.Cast InvalidCastException

为什么

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

因InvalidCastException而失败?

1 个答案:

答案 0 :(得分:8)

请参阅此答案:Puzzling Enumerable.Cast InvalidCastException

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

解决方案是使用Select来执行显式转换:

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