一尘不染

为什么(int)(object)10m会引发“指定的转换无效”异常?

c#

为什么此显式强制转换会引发Specified cast is not valid.异常?

decimal d = 10m;
object o = d;
int x = (int)o;

但这有效:

int x = (int)(decimal)o;

阅读 376

收藏
2020-05-19

共1个答案

一尘不染

装箱的值只能拆箱到完全相同类型的变量。这种看似奇怪的限制是非常重要的速度优化,它使.NET
1.x在使用泛型之前就变得可行。您可以在此答案中了解更多信息。

您不想跳过多个转换箍,简单的值类型实现IConvertible接口。使用Convert类调用的方法:

        object o = 12m;
        int ix = Convert.ToInt32(o);
2020-05-19