.net麻烦铸造整数做小数

时间:2010-03-02 16:17:29

标签: c# .net linq casting

为什么这样:

(new[]{1,2,3}).Cast<decimal>();

导致

  

InvalidCastException:指定的强制转换无效。

2 个答案:

答案 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);