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

VVS*_*VVS 2 c# extension-methods casting

可能重复:
令人困惑的Enumerable.Cast InvalidCastException

为什么

List<long> numbers = Enumerable.Range(1, 9999).Cast<long>().ToList();
Run Code Online (Sandbox Code Playgroud)

失败并出现InvalidCastException?

Kei*_*thS 8

看到这个答案:令人费解的Enumerable.Cast InvalidCastException

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

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

var numbers = Enumerable.Range(1,9999).Select(i=>(long)i).ToList();
Run Code Online (Sandbox Code Playgroud)