枚举是用户定义的整数类型,它是强类型的,与类同级,通常用来表示一组常量。(成员可以使用汉字)
public enum Sex:int //可指定类型有:byte、sbyte、short、ushort、int、uint、long、ulong { 男 = 0, //可指定允许范围的整数,默认为0,以1为增量增加 女 = 1 }
枚举的优点:
1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。
2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。
3、枚举使代码更易输入和读取。
1、简单枚举
- 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
- 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
- 枚举都是隐式密封的,不允许作为基类派生子类。
- 枚举类型的枚举成员均为静态,且默认为Int32类型。
- 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
- 枚举成员不能相同,但枚举的值可以相同。
- 枚举最后一个成员的逗号和大括号后面的分号可以省略
2、标志枚举
标志枚举要在顶部加[System.Flags]特性进行声明。而且枚举支持组合运算。
这种位运算是非常有用的,在sql语句里也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来。比如:
将一个"高帅"存如数据库的值存入数据库,那么存入去的就是整型5。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace enumApplication { class Program { static void Main(string[] args) { var man = People.高 | People.帅; //赋值为101 计算方法001或上100,结果是101 Console.WriteLine("高和帅的枚举值和为:"+(int)man); if ((man & People.高) == People.高) //101 man { //001 高 逐位相与, Console.WriteLine("此人:高"); //001 如果结果是高,就可以反推出man包含 高 } else { Console.WriteLine("此人:矮"); } Console.ReadKey(); } [System.Flags] public enum People:int { 高 = 1, //001 富 = 2, //010 帅 = 4, //100 } } }
枚举。整数。字符串之间的转换
public enum Sex
{
男,
女
}
static void Main(string[] args)
{
Console.WriteLine((int)Sex.女);//将枚举转换为int
Console.WriteLine(Sex.女.ToString());//将枚举转换为string
Sex sex1 = (Sex)1;//将int转换为枚举
Console.WriteLine(sex1.ToString());
Sex sex2 = (Sex)Enum.Parse(typeof(Sex), "女");//将string转换为枚举
Console.WriteLine(sex2.ToString());
Console.WriteLine(Enum.GetName(typeof(Sex),1));//将数字转换为枚举中对应的字符串
}