在c#中,枚举(enumeration)是一种数据类型,和int、double、string等类型相似。枚举用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。例如一周有周一、周二……周日,则可定义一个枚举类型包括周一……周日七个取值。
c#中枚举的声明关键字为enum
[public] enum 枚举名
{
值1,
值2,
值3,
……
}
public:访问修饰符,公共的。可省略
enum:关键字,生命枚举类型
枚举名:符合Pascal明明规范
需要注意,枚举名一般声明在命名空间下面,因为这样可以让命名空间下面的类都可以应用到。
使用枚举时和其他数据类型一样:变量类型 变量名=值
举例子
using System;
namespace demo_1
{
//声明枚举类Week
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
//使用枚举 变量类型 变量名=值
Week week = Week.星期一;
Console.WriteLine(week);
}
}
}
这样就输出了枚举中的“星期一”。
枚举类和int类型时兼容的,可以相互转换。
举例子
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)Week.星期一);
}
}
}
输出0
继续测试
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)Week.星期一);
Console.WriteLine((int)Week.星期二);
Console.WriteLine((int)Week.星期三);
Console.WriteLine((int)Week.星期四);
Console.WriteLine((int)Week.星期五);
}
}
}
using System;
namespace demo_1
{
public enum Week
{
星期一 = 2,//改写了
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)Week.星期一);
Console.WriteLine((int)Week.星期二);
Console.WriteLine((int)Week.星期三);
Console.WriteLine((int)Week.星期四);
Console.WriteLine((int)Week.星期五);
}
}
}
输出
总结:枚举类型默认是跟int类型互相兼容的,所以可以通过强制转换的语法互相转换,并且枚举转int时,枚举中的第一个量为0,其余一次递增。若给枚举中的量赋值,则转int时输出为赋给值,其余再次基础上依次递增。当转换一个枚举中没有的值的时候,不会抛异常,会将数字直接显示出来。int转枚举同理
double、float、decmial等同理。
举例子
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
int n = 1;
Console.WriteLine((Week)n);
}
}
}
输出星期二
将n改为8,继续测试
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
int n = 8;//改为8
Console.WriteLine((Week)n);
}
}
}
输出8
使用ToString()
举例子
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
Week week = Week.星期一;
Console.WriteLine(week.ToString());
}
}
}
输出字符串星期一
使用Enum.Parse(typeof(枚举名),要转换的字符串)
。注意,不存在Convert.ToEnum()
举例子
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
string s = "0";
Week week = (Week)Enum.Parse(typeof(Week), s);
Console.WriteLine(week);
}
}
}
输出星期一
令s = “8”,继续测试
using System;
namespace demo_1
{
public enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
}
class Program
{
static void Main(string[] args)
{
string s = "8";//改成8
Week week = (Week)Enum.Parse(typeof(Week), s);
Console.WriteLine(week);
}
}
}
输出8
将s改为星期一,继续测试
输出星期一
将s改为星期八,继续测试
抛出异常
总结:枚举和string类型不兼容。字符串转枚举时,如果转换字符串是数字,即使枚举中没有该值,也不会抛出异常。如果转换的字符串是文本,如果枚举中没有则会抛出异常。