我尝试从 Object 类型转换为十进制:
Object obj = new Object();
obj = 10;
decimal dec = (decimal)obj;
但是在这一行中 decimal dec = (decimal)obj,我得到了这个异常:
指定的演员表无效。
知道为什么无法实施此拆箱吗?
先感谢您。
这就是为什么你有Convert.ToDecimal()
装箱和拆箱只能在相同类型之间发生。
10
文字在 C# 编译器中表示为 System.Int32(如果我错了,请纠正我),因此将其拆箱为小数将导致错误
您只能将值类型拆箱为其原始类型或该类型的可空等效版本。
出于这背后的原因,请阅读此Eric Lippert 的
当您编写时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 上的装箱和拆箱文章。
为了在运行时成功拆箱值类型,拆箱的项目必须是对先前通过装箱该值类型的实例创建的对象的引用。尝试拆箱 null 会导致 NullReferenceException。尝试取消对不兼容值类型的引用会导致 InvalidCastException。