【问题标题】:Casting a boxed value铸造一个装箱的值
【发布时间】:2011-03-15 13:50:48
【问题描述】:

为什么不能将被装箱的int 直接转换为double

object o = 12;
double d = (double)o;

这会抛出一个无效的强制转换异常。相反,它似乎必须首先转换为int,然后再转换为double

object o = 12;
double d = (double)(int)o;

我确信简单的答案是“因为拳击就是这样运作的”,但我希望有人能在这里阐明一点。

【问题讨论】:

标签: c# casting


【解决方案1】:

查看今天早些时候的这个问题:Why am I getting InvalidCastException?

仅当目标类型与被装箱的原始类型完全相同时,拆箱操作才会成功,因此会引发异常。 This link John Leidegren 提供的详细解释。

【讨论】:

    【解决方案2】:

    如果您在编译时不知道原始类型:

    object o = 12;
    double d = (double)Convert.ChangeType(o, typeof(double));
    

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 2015-05-21
      • 2014-04-30
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多