我想知道当您将object
投射到int
时,C#会做什么。
object o = 10;
int i = (int) o;
非常感谢:)!
答案 0 :(得分:12)
在一般情况下,这是一个棘手的问题; p这取决于确切的情景:
object
,则它是 unbox 操作,它颠倒了值类型的特殊方式可以存储在对象引用(Unbox
/ Unbox_Any
)Nullable<int>
,则评估.Value
属性(如果值为空,则可能导致异常)uint
,float
等)中记录的几种内置类型之一,则会发出特定的操作码(可能根本没有)直接在IL(Conv_I4
)Call
)CastClass
)我认为相当完整?
答案 1 :(得分:4)
这是装箱和拆箱的一个例子:
http://msdn.microsoft.com/en-us/library/yz2be5wk(VS.80).aspx
C#采用int的值类型(可能是局部变量,在寄存器中或堆栈中),将其装入对象中,并将其放在堆上。当你转回int时,过程就会逆转。
更常见的是,编译器在转换时会创建非常复杂且特定于类型的IL,特别是它必须在运行时确保您之间的类型是兼容的,查找代码中定义的特定转换运算符,处理溢出铸造是一个非常昂贵的过程。
答案 2 :(得分:1)
在这种特殊情况下,它被称为“拆箱”,请检查http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
答案 3 :(得分:0)
请到这里获取有关以下内容的信息:Casting
另外,值得一读:Boxing and Unboxing