一尘不染

为什么Enumerable.Cast引发InvalidCastException?

c#

如果我可以将整数值隐式转换为双精度型,例如:

int a = 4;    
double b = a;
// now b holds 4.0

为什么我不能这样做:

int[] intNumbers = {10, 6, 1, 9};    
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();

我收到“指定的演员表无效”的InvalidCastException异常。

相反(从double转换为int)会导致相同的错误。

我究竟做错了什么?


阅读 208

收藏
2020-05-19

共1个答案

一尘不染

好吧,您对的期望不正确Cast,仅此而已-这意味着要处理装箱/拆箱,参考和身份转换,仅此而已。不幸的是,文档不够清晰:(

解决方法是使用Select

doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
2020-05-19