Skip to content
On this page

枚举

枚举(Enum)是 C#中的一种数据类型,用于定义具有固定数目的命名常量。枚举可以使代码更加可读,更易于理解和维护,而不需要使用魔法数字(magic numbers)。在 C# 中,枚举是一种值类型(value type)。

csharp
using System;

namespace EnumExample
{
    class Program
    {
        /// <summary>
        /// 定义一个枚举,包含七个命名常量,分别代表每个星期的天
        /// </summary>
        enum DaysOfWeek
        {
            Monday,
            Tuesday,
            Wednesday,
            Thursday,
            Friday,
            Saturday,
            Sunday
        }

        static void Main(string[] args)
        {
            DaysOfWeek today = DaysOfWeek.Wednesday; // 将枚举的一个常量赋值给 today 变量
            Console.WriteLine($"Today is {today}"); // 打印 today 变量的值
            if (today == DaysOfWeek.Saturday || today == DaysOfWeek.Sunday) // 检查今天是不是周末
            {
                Console.WriteLine("It's the weekend!");
            }
            else
            {
                Console.WriteLine("It's a weekday.");
            }
        }
    }
}

// 输出
// Today is Wednesday
// It's a weekday.

在 C# 中,枚举可以具有底层类型(underlying type),默认为整数类型(int)。也可以指定其他整数类型,例如byteshortlong等。以下是一个具有不同底层类型的枚举的示例:

csharp
enum Color : byte
{
    Red = 1,
    Green = 2,
    Blue = 3
}

enum Size : short
{
    Small = 1,
    Medium = 2,
    Large = 3
}

在上面的示例中,我们定义了两个枚举,一个具有 byte 类型的底层类型,另一个具有 short 类型的底层类型。在这些枚举中,每个常量都有一个指定的值,可以是任何类型的常量表达式。

csharp
using System;

namespace EnumExample
{
    /// <summary>
    /// 定义一个枚举,包含七个命名常量,分别代表每个星期的天
    /// </summary>
    enum DaysOfWeek
    {
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
    }

    class Program
    {
        static void Main(string[] args)
        {
            DaysOfWeek today = DaysOfWeek.Tuesday; // 将枚举的一个常量赋值给 today 变量
            string todayName = today.ToString(); // 使用 ToString 方法来获取枚举常量的名称
            int todayValue = (int)today; // 使用强制类型转换将枚举常量的值转换为整数类型

            // 打印 today 变量的值
            // 输出中的 Tuesday 的值为 1,因为枚举常量的默认值为整数,从 0 开始,每个常量增加 1
            Console.WriteLine("Today is {0} ({1})", todayName, todayValue);
        }
    }
}

// 输出
// Today is Tuesday (1)

总之,C#中的枚举是一种用于定义具有固定数目的命名常量的数据类型。枚举可以使代码更易于理解和维护,并且可以具有不同的底层类型和值。