在方法参数中隐式转换Enum

时间:2018-03-09 14:48:03

标签: c# .net enums

我不明白将int隐式转换为Enum的逻辑。

  class Program
{
    static void Main(string[] args)
    {
       TestMethod((int)0); //ok
        TestMethod((int)1); //compile error it is not assignable
    }

    private static void TestMethod(SuperEnum e)
    {
       //...
    }
}

public enum SuperEnum : int
{
    None = 0,
    One,
    Two
}

为什么零是可以接受的,但是任何整数都不是?

第一行的MSIL列表看起来与

相同

TestMethod(0)和TestMethod((SuperEnum)1)

 // [12 9 - 12 10]
IL_0000: nop          

// [13 12 - 13 31]
IL_0001: ldc.i4.0  //load 0 or 1   
IL_0002: call         void ConsoleApp2.Program::TestMethod(valuetype ConsoleApp2.SuperEnum)
IL_0007: nop          

// [15 9 - 15 10]
IL_0008: ret          

谢谢!

0 个答案:

没有答案