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

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

decimal d = 10m;

object o = d;

int x = (int)o;

但这有效:

int x = (int)(decimal)o;

回答:

装箱的值只能拆箱到完全相同类型的变量。这种看似奇怪的限制是非常重要的速度优化,它使.NET

1.x在使用泛型之前就变得可行。您可以在此答案中了解更多信息。

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

        object o = 12m;

int ix = Convert.ToInt32(o);

以上是 为什么(int)(object)10m会引发“指定的转换无效”异常? 的全部内容, 来源链接: utcz.com/qa/403561.html

回到顶部