我尝试从Object类型转换为decimal:
Object obj = new Object();
obj = 10;
decimal dec = (decimal)obj;
但是在这行十进制dec =(十进制)obj 中,我得到了这个例外:
指定的演员表无效。
知道为什么这个拆箱无法实现?
提前谢谢你。
答案 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。