.NET C# Web开发学习之路(18)—— 枚举类型(enum)
枚举类型(也称为枚举)提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。 例如,假设你需要定义一个变量,其值表示一周内的某一天。 该变量只会存储七个有意义的值。 若要定义这些值,可以使用枚举类型,该类型是使用 enum 关键字声明的。
enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Month : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
每个枚举类型都有一个基础类型,该基础类型可以是除char以外的任何整型类型。默认情况下,枚举中每个元素的基础类型都为int。其他允许的基础类型:byte、sbyte、short、ushort、int、uint、long、ulong。可以使用冒号指定另一种整数类型,如上例所示。
基础类型指定为每个枚举数分配多少存储空间。但要将enum类型转换为整型,则必须使用显式转换。如:
int x = (int)Day.Sunday;
可以通过转换为基础类型来验证基础数值。
Day today = Day.Monday;
int dayNumber =(int)today;
Console.WriteLine("{0} is day number #{1}.", today, dayNumber);
Month thisMonth = Month.Dec;
byte monthNumber = (byte)thisMonth;
Console.WriteLine("{0} is month number #{1}.", thisMonth, monthNumber);
// Output:
// Monday is day number #1.
// Dec is month number #11.
使用枚举类型而不使用数值类型的好处:
- 明确为客户端代码指定对变量有效的值
- 在VS中,IntelliSense列出了定义的值。
如果没有给枚举器列表中的元素指定值,则值将自动按1递增。在上例中,Day.Sunday的值为0,Day.Monday的值为1,以此类推。创建新的Day对象时,如果没有明确为其分配值,它将具有默认值Day.Sunday(0)。
例:使用基类型选项来声明器成员是enum类型的long。请注意,即使该枚举的基础类型是long,仍然需要通过使用转换将枚举成员显式转换为类型long。
public class EnumTest
{
enum Range : long{Max = 2147483648L,Min = 255L};
static void Main()
{
long x = (long)Range.Max;
long y = (long)Range.Min;
Console.WriteLine("Max = {0}", x);
Console.WriteLine("Min = {0}", y);
}
}
/*
Output:
Max = 2147483648
Min = 255
*/
上面的例子是在类中声明了一个嵌套的枚举,也可以单独在命名空间下声明一个枚举,以便该命名空间下的所有类或其他数据结构都能访问到该枚举。
声明枚举的语法:
访问修饰符 enum 枚举名:基础类型
{
枚举成员
}
public enum Fruit:long
{
apple = -1,
orange = 2,
banana
}