【发布时间】:2010-11-09 09:21:16
【问题描述】:
为什么会抛出 InvalidCastException?有人能描述一下我的这种行为吗?
object zero = 0;
decimal? dec = (decimal?)zero;
【问题讨论】:
-
@John Saunders:这是不合法的。
为什么会抛出 InvalidCastException?有人能描述一下我的这种行为吗?
object zero = 0;
decimal? dec = (decimal?)zero;
【问题讨论】:
【讨论】:
看这篇文章 http://msdn.microsoft.com/en-us/magazine/cc301569.aspx
具体来说 “公共语言运行时首先确保引用类型变量不为空,并且它引用的对象是所需值类型的装箱值。如果任一测试失败,则会生成 InvalidCastException 异常。”
我认为您在该值的对象上失败了。我认为对 int 的覆盖是有效的,因为 0 文字将转换为 int,然后将 int 转换为十进制。
如果你这样做,它会起作用
decimal? test=0;
object zero = test;
decimal? dec = (decimal?)zero;
但我认为您的 sn-p 中的“0”不是“十进制”类型。
我仍然不肯定,因为这得到了同样的异常。
int test=0;
object zero = test;
decimal? dec = (decimal?)zero;
【讨论】: