您只能将值类型拆箱为其原始类型(以及该类型的可空版本)。
顺便说一句,这是有效的(只是您的两行版本的缩写):
object i = 4;decimal d = (decimal)(int)i; // works even w/o decimal as it's a widening conversion
出于此原因,请阅读Eric
Lippert的博客条目:表示和身份
就我个人而言,我将通过转换语法完成的工作归类为四种不同类型的操作(它们都有不同的IL指令):
- 装箱(
box
IL指令)和拆箱(unbox
IL指令) - 通过继承层次结构进行转换(如
dynamic_cast<Type>
C ++中一样,使用castclass
IL指令进行验证) - 基本类型之间的转换(像
static_cast<Type>
在C ++中一样,对于基本类型之间的不同类型的转换,有很多IL指令) - 调用用户定义的转换运算符(在IL级别,它们只是对适当
op_XXX
方法的方法调用)。



