学习C#中的枚举

97 阅读4分钟

C#中的枚举

开发人员有时会发现enumsconstants 之间的区别令人困惑,因为它们的工作方式类似。它们之间有什么主要区别吗?什么时候我们应该使用枚举而不是常量,反之亦然?

常量是任何数据类型的变量,在整个程序中不会改变其值,而枚举是用户定义的特定数据类型的值,可以改变。

C#中的枚举

在C#语言中,enum (也叫枚举)是一种用户定义的值类型,用于表示一个命名的整数常量列表。它是在一个类、结构或命名空间内使用enum 关键字创建的。它可以提高程序的可读性、可维护性并降低复杂性。

声明一个enum 的基本语法是。

enum enum_name {
   enumeration list
};

enum_name是你想给你的枚举列表起的名字。我们用逗号(,)来分隔枚举列表中的各个项目。

例如,一月、二月、三月、五月和六月是一年中的几个月。因此,这就成为一个枚举,其名称为年,元素为一月、二月、三月、五月和六月。

enum year
{
    // items of the enum
    January,
    February,
    March,
    April,
    May,
    June
}

枚举值

如果我们不给enum ,编译器会默认从0开始给这些项目分配一个整数值。第一个项目将被分配为0,每次增加一个项目都会递增一个。

enum year
{
    // items of the enum
    January,    //0
    February,   //1
    March,      //2
    April,      //3
    May,        //4
    June        //5
}

指派我们的值

我们可以改变枚举项目的值。如果我们改变其中一个月份的值,例如,3月到10月。那么编译器将按顺序分配其他的值,即它将从10开始递增1。

enum year
{
    // items of the enum
    January,    //0
    February,   //1
    March,      //10
    April,      //11
    May,        //12
    June        //13
}

访问一个枚举

我们使用语法访问一个enum 项目。

enum year
{
    // items of the enum
    January,
    February,
    March,
    April,
    May,
    June
}

Console.WriteLine(year.January); // January
Console.WriteLine(WeekDays.February); // February
Console.WriteLine(WeekDays.March); // March
Console.WriteLine(WeekDays.April); // April
Console.WriteLine(WeekDays.May); // May
Console.WriteLine(WeekDays.June); // June

将一个枚举转换为一个整数

我们需要明确地转换 enum 中的一个项目来获得一个整数值。

例子

让我们看一个程序来说明如何将项目转换为一个整数值。

using System;
namespace EnumerationExample {

enum year
{

    // items of the enum
    January,
    February,
    March,
    April,
    May,
    June

}

class Program {

    static void Main(string[] args)
    {

        // Printing out the integer values of the items
        Console.WriteLine("The value of January in year " + "enum is " + (int)year.January);
        Console.WriteLine("The value of February in year " + "enum is " + (int)year.February);
        Console.WriteLine("The value of March in year " + "enum is " + (int)year.March);
        Console.WriteLine("The value of April in year " + "enum is " + (int)year.April);
        Console.WriteLine("The value of May in year " + "enum is " + (int)year.May);
        Console.WriteLine("The value of June in year " + "enum is " + (int)year.June);
    }
}
}

当我们编译并执行我们的代码时,我们得到的输出为。

The value of January in year enum is 0
The value of February in year enum is 1
The value of March in year enum is 2
The value of April in year enum is 3
The value of May in year enum is 4
The value of June in year enum is 5

从上面的程序来看,我们没有给项目指定一个值,编译器将1月分配为0并开始递增1,给出2月1日,以此类推。

将一个枚举转换为一个字符串

我们使用ToString() 方法将一个枚举转换为一个字符串。

例子

让我们看一个如何将枚举项转换为字符串的例子。

//Convert an enum item to string
Console.WriteLine(year.January.ToString());
Console.WriteLine(year.February.ToString());
Console.WriteLine(year.March.ToString());

关于枚举初始化的有趣的事实和规则

  1. 我们可以给两个enum 名称分配一个值。

例子

enum color
{
    Blue = 1,
    Green = 1,
    Yellow = 2
}
  1. 如果我们没有赋值,编译器会给枚举项赋值。第一个项目被赋值为0,然后编译器会递增1。
  2. 我们只能给枚举名称分配积分值。我们不应该把字符串作为值来分配。

总结

在这篇文章中,我们已经研究了什么是枚举以及如何在我们的程序中应用它们。我们已经看到常量是用来声明一个单一的值的,而在枚举中,我们可以在一个枚举中表示一个项目的列表。现在我们可以很容易地使用枚举来表示一个命名的整数常量列表。