为什么此显式强制转换会引发Specified cast is not valid.异常?
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);