代码之家  ›  专栏  ›  技术社区  ›  Viper

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

  •  2
  • Viper  · 技术社区  · 14 年前

    以下代码的行为很奇怪(至少对我来说是这样):

    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 回复  |  直到 14 年前
        1
  •  3
  •   LukeH    14 年前

    这个 value ConversionTest 方法的类型为 object int --传递给的方法将被装箱。

    装箱的值只能解除装箱为完全相同的类型:

    • 当你这么做的时候 (long)(int)value 你是第一个拆箱的 价值 到一个 内景 (其原始类型)然后转换 内景 long
    • 当你这么做的时候 (long)value 你想拆开盒子 内景 长的