C#中的枚举
开发人员有时会发现enums 和constants 之间的区别令人困惑,因为它们的工作方式类似。它们之间有什么主要区别吗?什么时候我们应该使用枚举而不是常量,反之亦然?
常量是任何数据类型的变量,在整个程序中不会改变其值,而枚举是用户定义的特定数据类型的值,可以改变。
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());
关于枚举初始化的有趣的事实和规则
- 我们可以给两个
enum名称分配一个值。
例子
enum color
{
Blue = 1,
Green = 1,
Yellow = 2
}
- 如果我们没有赋值,编译器会给枚举项赋值。第一个项目被赋值为0,然后编译器会递增1。
- 我们只能给枚举名称分配积分值。我们不应该把字符串作为值来分配。
总结
在这篇文章中,我们已经研究了什么是枚举以及如何在我们的程序中应用它们。我们已经看到常量是用来声明一个单一的值的,而在枚举中,我们可以在一个枚举中表示一个项目的列表。现在我们可以很容易地使用枚举来表示一个命名的整数常量列表。