为什么这种转换不起作用?

以下代码表现得很奇怪(至少对我而言):

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 ,这是非法的。