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

时间:2010-09-08 09:12:46

标签: c# casting

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

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不起作用。 有人可以解释这种行为吗?

由于

1 个答案:

答案 0 :(得分:3)

value方法的ConversionTest参数输入为object;这意味着传递给方法的任何值类型(例如,int)都将被装箱。

装箱值只能拆箱到完全相同的类型:

  • 当您执行(long)(int)value时,您首先将value拆箱到int(原始类型),然后将int转换为long
  • 当您执行(long)value时,您试图将装箱的int重新打包到long,这是非法的。