为什么这种转换不起作用?
以下代码表现得很奇怪(至少对我而言):
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不起作用。 有人可以解释这种行为吗?
谢谢
您将ConversionTest
方法的value
参数键入为object
; 这意味着传递给方法的任何值类型(例如, int
都将被加框。
盒装值只能拆箱到完全相同的类型:
- 当您执行
(long)(int)value
,首先将value
拆分为int
(其原始类型),然后将该int
转换为long
。 - 当你做
(long)value
你试图将盒装的int
拆箱到一个long
,这是非法的。