可能我可能会与拳击和拆箱混淆.
请考虑MSDN中的以下声明:
"取消装箱是从类型对象到值类型或从接口类型到实现接口的值类型的显式转换."
因此,这意味着取消装箱只能应用于值类型参数.
所以,这没关系.
var concernedInteger = (int)myObject; //unboxing is ok.
Run Code Online (Sandbox Code Playgroud)
由于class是引用类型,因此不起作用(因为取消装箱仅适用于值类型)
var concernedClassObject = (TestClass)testClassObject // unboxing is still ok.
Run Code Online (Sandbox Code Playgroud)
我的ReSharper没有显示任何错误.
所以,我的问题是"当MSDN说只有值类型可以解包"时,如何拆箱引用类型变量?
这不是拆箱.是的type casting.
取消装箱将值从引用拉出到值类型(假设转换成功).当你像这样移动引用类型时,它只是普通的类型转换.
type casting无论如何,拳击和拆箱都是两种类型.它们被赋予特殊名称(装箱和拆箱)的原因是因为更多的是在托管环境中继续进行而不是仅仅修改了几个查找表.这就是为什么它们被分为值类型的装箱和拆箱术语.但是当它涉及引用类型时......它只是类型转换.