C# enum:枚举类型

枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从 0 开始的,然后逐一递增。

在 C# 中可以使用 enum 关键字来声明枚举类型,语法格式如下所示:

enum enum_name{
    enumeration list;
}

其中,enum_name 为枚举类型变量的名称;enumeration list 为枚举类型中的成员列表,其中包含若干使用逗号分隔的标识符,每个标识符都代表了一个整数值。

在使用枚举类型时有以下几点需要注意:
  • 枚举类型中不能定义方法;
  • 枚举类型具有固定的常量集;
  • 枚举类型可提高类型的安全性;
  • 枚举类型可以遍历。

下面通过示例来演示一下枚举变量的使用:
using System;

namespace c.biancheng.net
{
    class Demo
    {
        enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
        static void Main(string[] args) 
        { 
            Console.WriteLine("Sun = {0}", (int)Day.Sun);
            Console.WriteLine("Mon = {0}", (int)Day.Mon);
            Console.WriteLine("Tue = {0}", (int)Day.Tue);
            Console.WriteLine("Wed = {0}", (int)Day.Wed);
            Console.WriteLine("Thu = {0}", (int)Day.Thu);
            Console.WriteLine("Fri = {0}", (int)Day.Fri);
            Console.WriteLine("Sat = {0}", (int)Day.Sat);
            Console.ReadKey();
        }
    }
}
运行结果如下:

Sun = 0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6

默认情况下,枚举类型中的每个成员都为 int 类型,它们的值从零开始,并按定义顺序依次递增。但是我们也可以显式的为每个枚举类型的成员赋值,如下所示:

enum ErrorCode
{
    None,
    Unknown,
    ConnectionLost = 100,
    OutlierReading = 200
}

【示例】使用 GetValues()  遍历枚举类型中的所有成员:
using System;

namespace c.biancheng.net
{
    class Demo
    {
        enum Season {
            winter = 10,
            spring,
            summer = 15,
            autumn
        };
        static void Main(string[] args) 
        {
            foreach(Season i in Enum.GetValues(typeof(Season))){
                Console.WriteLine("{0} = {1}", i, (int)i);
            }
            Console.ReadKey();
        }
    }
}
运行结果如下:

winter = 10
spring = 11
summer = 15
autumn = 16

【示例】使用 GetNames() 遍历枚举类型中的所有成员:
using System;

namespace c.biancheng.net
{
    class Demo
    {
        enum Season {
            winter = 10,
            spring,
            summer = 15,
            autumn
        };
        static void Main(string[] args) 
        {
            foreach(String s in Enum.GetNames(typeof(Season))){
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }
    }
}
运行结果如下:

winter
spring
summer
autumn