也许我会把拳击和拳击搞混。
请考虑MSDN中的以下语句:
“取消装箱是从类型对象到值类型或从接口类型到实现接口的值类型的显式转换。”
因此,这意味着取消装箱只能应用于值类型参数。
所以,这没什么。
var concernedInteger = (int)myObject; //unboxing is ok.因为类是引用类型,所以这不应该有效(因为取消装箱只适用于值类型)
var concernedClassObject = (TestClass)testClassObject // unboxing is still ok.我的ReSharper没有显示任何错误。
所以,我的问题是,“当MSDN说只有值类型可以取消装箱时,如何才能打开引用类型变量”?
发布于 2013-09-03 06:21:13
这不是解除拳击。是type casting。
取消装箱是将引用中的值提取到值类型中(假设转换成功)。当你像这样移动引用类型时..。这只是普通类型的铸造。
装箱和取消装箱无论如何都是type casting的类型。之所以给它们起特殊的名称(装箱和取消装箱),是因为在托管环境中发生了更多的事情,而不仅仅是对两个查找表进行了更改。这就是为什么它们被分隔为术语装箱和取消装箱的值类型。但是当提到引用类型时..。只是典型的演员。
发布于 2013-09-03 06:30:18
您在这里所做的是TypeCasting,而不是装箱/取消装箱。但是,同样的转换语法用于取消装箱和显式引用转换。
Boxing和UnBoxing:
当您在引用类型(基本上是对象)之间转换值类型时,Boxing和unboxing起作用
一个简单的boxing和unboxing示例如下
int i=1;
object o=i; /// This is boxing
int j = (int)o; /// This is unboxingTypeCasting:
类型转换会导致转换。类型强制转换执行表达式到给定类型的显式转换。
(type) expression将expression转换为type类型的对象。让我们考虑一下例子
long _longval = 1;
int i = (int)_longval显式转换实际上告诉编译器我们知道可能的信息丢失,但仍然需要执行强制转换。对于内置的数字类型来说,这是可以的,但是在引用类型中,它完全不是兼容的.for示例。
string _mystring="abc";
int i=(int)_mystring;这样的转换表达式将成功编译,但在运行时会失败,从而导致InvalidCastException错误。
使用As关键字:
示例
MyClass _MyObject = (MyClass ) obj;
MyClass MyObject = obj as MyClass ;当第一行代码转换失败时,抛出一个异常,而在第二行中,您只能获得空 value.Also,您可以只在引用类型中使用as,因此对于值类型,您只能使用普通的强制转换方法。
https://stackoverflow.com/questions/18585396
复制相似问题