无法实现十进制转换的对象

时间:2013-07-14 11:03:53

标签: c# .net

我尝试从Object类型转换为decimal:

 Object obj = new Object();
 obj = 10;
 decimal dec = (decimal)obj;

但是在这行十进制dec =(十进制)obj 中,我得到了这个例外:

指定的演员表无效。

知道为什么这个拆箱无法实现?

提前谢谢你。

3 个答案:

答案 0 :(得分:3)

这就是为什么你有Convert.ToDecimal()拳击和拆箱只能在相同的类型之间发生。

10 literal在C#编译器中表示为System.Int32(如果我是错误的人,请更正我)因此将其拆箱到小数将导致错误

答案 1 :(得分:2)

您只能将值类型拆分为其原始类型或该类型的可空等效版本。

由于这背后的原因,请阅读此Eric Lippert's

答案 2 :(得分:2)

当您编写obj = 10;时,对象的值为int。

试试这个:

Object obj = new Object();
obj = 10M;
decimal dec = (decimal)obj;

或者这个:

Object obj = new Object();
obj = 10;
decimal dec = (decimal)(int)obj;

您应该阅读有关msdn。

Boxing and Unboxing文章
  

要使值类型的取消装箱在运行时成功,则该项目为   unboxed必须是对先前创建的对象的引用   通过装箱该值类型的实例。试图取消装箱null   导致NullReferenceException。试图取消对...的引用   不兼容的值类型会导致InvalidCastException。