我可以将byte
强制转换为int
。
byte a = 2;
int b = a; // => unboxing, boxing or conversion?
当我先将byte
投射到object
之后再投射到int
时,我得到InvalidCastException
。
byte a = 2;
object b = a; // => boxing?
int c = (int) b; // => unboxing fails?
但是我可以使用Convert.ToInt32
解决此问题。
byte a = 2;
object b = a; // => boxing?
int c = Convert.ToInt32(b); // => what happens here?
InvalidCastException
?Convert.ToInt32
在后台是什么?boxing
,unboxing
和conversion
? /如果不确定示例中的正确术语是什么?请不要犹豫,向我暗示其他我可能弄错或错过的事情。
答案 0 :(得分:5)
为什么在第二个示例中得到
InvalidCastException
?
因为您指定了要将(装箱的)变量的类型强制转换(同时取消装箱)为其他类型。而且没有定义内置的,隐式的或显式的转换运算符,因此它将失败。
Convert.ToInt32
在后台是什么?
This.它使用IConvertible
界面进行转换。
我是否正确标记了装箱,拆箱和转换标签? /如果不确定示例中的正确术语是什么?
int b = a; // => conversion
object b = a; // => boxing
int c = (int) b; // => casting fails
int c = Convert.ToInt32(b); // => what happens here: a method call that happens to do a conversion
这里的转换运算符在起作用吗?是否有关于基本类型的基本转换运算符的概述?
是的,尽管在CLR中定义。
答案 1 :(得分:1)
为什么在第二个示例中出现InvalidCastException?
您只能在原始类型中取消装箱
Convert.ToInt32在后台有什么作用?
它包含一个转换
我是否正确标记了装箱,拆箱和转换标签? /如果不确定示例中的正确术语是什么?
byte a = 2;
int b = a; // convertation (byte to int)
object b = a; // boxing
int c = (int) b; //unboxing
object b = a; // boxing
int c = Convert.ToInt32(b); // convertation (object to int)
这里的转换运算符在起作用吗?是否有关于基本类型的基本转换运算符的概述?
您可以反映框架代码以进一步了解其工作原理。
答案 2 :(得分:-2)
应该是
object b = a; // => boxing
int c = (int) b; //Un-boxing