意外的“指定的强制转换无效.”异常(Linq)

本文关键字:异常 Linq 无效 意外 转换 | 更新日期: 2023-09-27 17:59:07

有人知道为什么我不能使用Linq扩展方法Cast<>()Int强制转换为UInt吗?

var myIntList = new List<int>();
myIntList.Add(1);
myIntList.Add(2);
myIntList.Add(3);
var myUIntList = myIntList.Cast<uint>().ToList();

它抛出指定的强制转换无效。当我使用Select()时,它会工作(当然)

var myIntList = new List<int>();
myIntList.Add(1);
myIntList.Add(2);
myIntList.Add(3);
var myUIntList = myIntList.Select(i => (uint)i).ToList();

(这是一个错误还是未实现的功能?)

意外的“指定的强制转换无效.”异常(Linq)

Enumerable.Cast作为IEnumerable非通用接口)上的扩展方法实现。

这意味着序列中的值是从object强制转换的,这意味着值类型涉及装箱和取消装箱。您只能取消对确切类型的复选框。例如:

int i = 1;
object boxed = i;
int unboxToInt = (int)boxed; // ok
uint unboxToUint = (uint)boxed; // invalid cast exception

您可以在文档中阅读更多关于装箱的信息。