C# 语法练习,6: 枚举

显示枚举、枚举值、枚举名:


using System;

class MyClass
{
    enum MyEnum { AA, BB, CC };  /* 类型定义不能在函数体内 */

    static void Main()
    {
        MyEnum e = MyEnum.CC;
        Console.WriteLine(e);                   // CC
        Console.WriteLine((byte)e);             // 2
        Console.WriteLine((int)e);              // 2
        Console.WriteLine(Convert.ToString(e)); // CC

        Console.ReadKey();
    }
}

转换数值或字符串到枚举:


using System;

class MyClass
{
    enum MyEnum { AA, BB, CC };

    static void Main()
    {
        MyEnum e;

        e = (MyEnum)1;
        Console.WriteLine(e);                         // BB

        e = (MyEnum)Enum.Parse(typeof(MyEnum), "BB");
        Console.WriteLine(e);                         // BB

        Console.ReadKey();
    }
}

获取枚举的 Names 和 Values:


using System;

class MyClass
{
    enum MyEnum { AA, BB, CC };

    static void Main()
    {
        foreach (string s in Enum.GetNames(typeof(MyEnum)))
        {
            Console.WriteLine(s); // AA/BB/CC
        }

        foreach (int n in Enum.GetValues(typeof(MyEnum)))
        {
            Console.WriteLine(n); // 0/1/2
        }
        
        Console.ReadKey();
    }
}

枚举值是一个整数(默认是 int 类型、从 0 开始), 可以自定义枚举值:


using System;

class MyClass
{
    enum MyEnum { AA=2, BB, CC=7, DD, EE };

    static void Main()
    {
        foreach (int i in Enum.GetValues(typeof(MyEnum)))
        {
            Console.WriteLine(i); // 2/3/7/8/9
        }
        
        Console.ReadKey();
    }
}

可以指定所有整型(不包括 char 类型)为枚举值的类型, 下面是指定为 byte:


using System;

class MyClass
{
    enum MyEnum : byte { AA, BB, CC, DD };

    static void Main()
    {
        string[] Names = Enum.GetNames(typeof(MyEnum));
        foreach (string s in Names)
        {
            Console.WriteLine(s); // AA/BB/CC/DD
        }

        byte[] Values = (byte[])Enum.GetValues(typeof(MyEnum));
        foreach (byte n in Values)
        {
            Console.WriteLine(n); // 0/1/2/3
        }

        Console.ReadKey();
    }
}

枚举经常这样用:


using System;

class MyClass
{
    enum MyEnum
    {
        AA = 0x0,
        BB = 0x1,
        CC = 0x2,
        DD = 0x4,
        EE = 0x8,
        FF = 0x10,
        GG = 0x20,
        HH = 0x40
    }

    static void Main()
    {
        MyEnum es = MyEnum.CC | MyEnum.DD;
        
        Console.WriteLine(es); // 6

        Console.ReadKey();
    }
}