C#程序设计自学经典
上QQ阅读APP看书,第一时间看更新

4.6 枚举

枚举类型是一种特殊的值类型,它用于声明一组具有相同性质的常量。

System.Enum类型是所有枚举类型的抽象基类,并且从System.Enum继承的成员在任何枚举类型中都可用。System.Enum本身并不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。System.Enum从类型System.ValueType派生。

4.6.1 枚举的声明

在C#中使用enum关键字声明枚举,其语法格式如下:

    访问修饰符 enum enumName: 基本类型
    {
        list1=vlaue1,
        list2=value2,
        list3=value3,
    …
        listN=valueN
    }

其中,enumName为枚举名,基本类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明byte、sbyte、short、ushort、int、uint、long或ulong类型作为对应的基本类型。没有显式地声明基本类型的枚举声明意味着所对应的基本类型是int。大括号中为枚举值列表,任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基本类型。每个枚举成员的常数值必须在该枚举的基本类型的范围之内。若不对其进行赋值,默认情况下,第一个枚举的值为0,后面的枚举值依次递增1。

下面的代码片段演示了枚举类型的声明。

    public enum Times
    {
        Morning = 1,
        Afternoon = 2,
        Evening = 3
    } 

4.6.2 枚举类型与基本类型的转换

基本类型不能隐式转换为枚举类型,而枚举类型也不能隐式转换为基础类型,枚举类型与基本类型之间的转换,要使用强制类型转换。下面的例子演示了对枚举类型的基本操作。

例4-8:枚举类型与基本类型的转换(ConsoleEnumConvert)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleEnumConvert
    {
        class Program
        {
            static void Main(string[] args)
            {
                Weekday weekday = Weekday.Monday;
    
                Console.WriteLine("今天是:\t\t" + weekday);
    
                weekday++;
    
                Console.WriteLine("\n明天是:\t\t" + weekday);
    
                weekday = (Weekday)4;
    
                Console.WriteLine("\n大后天是:\t\t" + weekday);
    
                int friday = (int)Weekday.Friday
                    ;
                Console.WriteLine("\n星期五转换为数字为:\t" + friday);
    
                Console.ReadLine();
            }
            enum Weekday
            {
                Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
            }
        }
    }

运行结果如图4-8所示。

图4-8 枚举类型与基本类型的转换