以下代码表现得很奇怪(至少对我而言):
int testValue = 1234;
this.ConversionTest( testValue );
private void ConversionTest( object value )
{
long val_1 = (long) (int) value; // works
long val_2 = (long) value; // InvalidCastException
}
我不明白为什么直接(显式)强制转换为long不起作用。 有人可以解释这种行为吗?
由于
答案 0 :(得分:3)
value
方法的ConversionTest
参数输入为object
;这意味着传递给方法的任何值类型(例如,int
)都将被装箱。
装箱值只能拆箱到完全相同的类型:
(long)(int)value
时,您首先将value
拆箱到int
(原始类型),然后将int
转换为long
。 (long)value
时,您试图将装箱的int
重新打包到long
,这是非法的。