TOC

This article is currently in the process of being translated into Chinese (~90% done).

Advanced topics:

Enumerations

枚举是一个特殊的名称集合,这些名称全都一一映射到一个数字集合,通常为整数。当想从一组常量值中进行选择,而这组常量又一一对应某个数字时,枚举类型就很方便,而且此类应用场景也很广泛。就象本文的示例将会展示的那样,枚举类型是基于类定义的,存在于名空间。表示可以在所有类中引用同一名空间内的枚举类型。

这是一个简单的枚举示例,可以展示出什么是枚举。

public enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

所有可用的值都对应到一个数字。如果没有特别指定,第一个值为0,第二个为1,以此类推。下列代码片段可以证明这一点,同时展示怎样使用enum类型可用的值:

using System;

namespace ConsoleApplication1
{
    public enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

    class Program
    {
        static void Main(string[] args)
        {
            Days day = Days.Monday;
            Console.WriteLine((int)day);
            Console.ReadLine();
        }
    }
}

以上代码会输出0,因为Monday值直接映射到数字0。显然这是可以改变的 - 把上述代码作类似这样的修改:

public enum Days { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

重新运行代码,就会看到Monday值变成了1,而不是0。结果是所有的其它值也会增加1。也可以对其它值赋其它数字。因为值与数字是直接映射的,所以可以用数字获得相应的枚举值,象这样:

Days day = (Days)5;
Console.WriteLine(day);
Console.ReadLine();

枚举类型另一个有用的功能是把字符串与值关联。把上述代码作类似这样的修改:

static void Main(string[] args)
{
    string[] values = Enum.GetNames(typeof(Days));
    foreach(string s in values)
        Console.WriteLine(s);
    
    Console.ReadLine();
}

Enum类包含一批有用方法可用于操作枚举类型。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!