为什么这样:
(new[]{1,2,3}).Cast<decimal>();
导致
InvalidCastException:指定的强制转换无效。
答案 0 :(得分:11)
是的,Cast
不这样做。基本上它只是引用转化和拆箱转换 - 而不是不同值类型之间的转换。
请改用:
(new[]{1,2,3}).Select(x => (decimal)x)
请注意,在.NET 3.5 SP1之前,Cast
比现在更多地进行了一些转换。我不知道它是否会起作用,但现在肯定不行。
答案 1 :(得分:3)
Cast未转换。
当您使用Cast扩展方法时,它正在尝试根据继承方案强制转换项目。由于int不是从十进制派生的,因此无法使用Cast完成。请尝试以下方法:
(new[] {1,2,3}).Select(x => (decimal)X);