代码之家  ›  专栏  ›  技术社区  ›  Ronnie Overby

.NET转换整数和小数时出错

  •  6
  • Ronnie Overby  · 技术社区  · 14 年前

    为什么:

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

    导致一个

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

    2 回复  |  直到 14 年前
        1
  •  11
  •   Jon Skeet    14 年前

    是的, Cast 不会那么做的。基本上它只做引用转换和取消装箱转换-而不是不同值类型之间的转换。

    改用这个:

    (new[]{1,2,3}).Select(x => (decimal)x)
    

    注意,在.NET 3.5 SP1之前, 铸造 一些 比现在更多的转化率。我不知道当时是否可行,但现在肯定不行。

        2
  •  3
  •   David Morton    14 年前

    转换不是转换。

    当您使用cast扩展方法时,它试图根据继承方案来转换项。因为int不是从decimal派生的,所以这不能使用cast完成。请尝试以下操作:

    (new[] {1,2,3}).Select(x => (decimal)X);