枚举
枚举用来定义一个类型,其中包含提供的限定值集合中的一个值。
和结构类型不同,枚举类型要求其成员只能是整数类型。
定义枚举:
enum typeName
{
value1,
value2,
value3,
...
valueN
}
声明枚举类型变量:
typeName varName;
赋值:
varName = typeName.value1;
enum Weekday
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
枚举使用一个基本类型来存储,枚举类型可以提供的每个值都为该类型的一个值。在默认情况下,该类型为int。在枚举声明中添加类型,可以指定其他基本类型:
enum typeName : unterlyingType
{
value1,
value2,
value3,
...
valueN
}
枚举的基本类型可以是 byte、sbyte、short、ushort、int、uint、long和ulong。
enum Weekday : byte
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
在默认情况下,C#编译器默认枚举中的第一个元素对应的整数值为0,其后的每个元素值一次递增1,自动赋给对应的基本类型值,也可以使用 = 运算符指定每个枚举的实际值,为枚举类型的变量所赋的值可以不在限定范围之内。
。
enum typeName
{
value1 = actualVal1,
value2 = actualVal2,
value3 = actualVal3,
...
valueN = actualValN
}
没有赋值的任何值都会自动获得一个初始值——比最后一个明确声明的值大1开始的序列。
enum Weekday
{
Sunday = 1,
Monday,
Tuesday = 5,
Wednesday,
Thursday,
Friday,
Saturday
}
需要注意的是,结构类型是由一组不同类型的成员组成的新的数据类型,结构类型的变量包含了所有成员的值;而枚举类型只是列举出各个成员,枚举类型的变量在某一时刻只能取其中某个成员的值。
对枚举成员的访问通过“.”进行,只不过不是通过枚举类型变量,而是通过枚举类型的名称。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumExample
{
class Program
{
static void Main(string[] args)
{
Weekday w1;
w1 = Weekday.Sunday;
Console.WriteLine(w1);
w1 = w1 + 1;
Console.WriteLine(w1);
w1 = (Weekday)4;
Console.WriteLine(w1);
w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外
Console.WriteLine(w1); // 100
int i = (int)Weekday.Friday;
Console.WriteLine(i);
}
}
enum Weekday
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
}
执行结果
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumExample
{
class Program
{
static void Main(string[] args)
{
Weekday w1;
w1 = Weekday.Sunday;
Console.WriteLine(w1);
//w1 = w1 + 1;
//Console.WriteLine(w1);
//w1 = (Weekday)4;
//Console.WriteLine(w1);
//w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外
//Console.WriteLine(w1); // 100
//int i = (int)Weekday.Friday; //枚举值转化为其他类型
//Console.WriteLine(i);
}
}
enum Weekday
{
Sunday = 1,
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
}
执行结果:
枚举类型转换
把枚举类型转化为其他类型,必须进行显示转换。
int i = (int)Weekday.Friday;
要获得枚举的字符值,可以使用Convert.ToString(),也可使用变量自身的ToString()。
string strSaturday = Convert.ToString(Weekday.Saturday);
//string strSaturday = Weekday.Saturday.ToString();
把string类型转换为枚举值,Enum.Parse()。
string strWednesday = "Wednesday";
Weekday w2 = (Weekday)Enum.Parse(typeof(Weekday), strWednesday);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumExample
{
class Program
{
static void Main(string[] args)
{
Weekday w1;
w1 = Weekday.Sunday;
Console.WriteLine(w1);
w1 = w1 + 1;
Console.WriteLine(w1);
w1 = (Weekday)4;
Console.WriteLine(w1);
w1 = (Weekday)100; // 为枚举变量所赋在限定范围之外
Console.WriteLine(w1); // 100
int i = (int)Weekday.Friday;
Console.WriteLine(i);
// 枚举类型转换为字符串类型
string strSaturday = Convert.ToString(Weekday.Saturday);
//string strSaturday = Weekday.Saturday.ToString();
Console.WriteLine(strSaturday);
// 字符串类型转换为枚举类型
string strWednesday = "Wednesday";
Weekday w2 = (Weekday)Enum.Parse(typeof(Weekday), strWednesday);
Console.WriteLine(w2);
}
}
enum Weekday
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
}
执行结果:
结构与枚举的异同:
1、 结构类型是由一组不同类型的成员所组成的新的数据类型,结构类型的变量值包含了所有成员的值;而枚举类型只是列举出各个成员,枚举类型的变量在某一时刻只能取其中某个成员的值。
2、 对结构成员的访问通过结构类型变量,而对枚举成员的访问则通过枚举类型的名称。