一、枚举类型的定义
public enum 枚举名称:枚举数据类型(枚举的数据类型可以省略,默认类型为int) { 枚举项1=枚举项的值,(枚举项的值是整数可以自己设置) 枚举项2, 枚举项3 }
例如:
public enum month : ushort { 一月, 二月, 三月=1000, 四月 }
需要注意:
1.枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。
2.枚举项的值默认是从0开始,每一项后加一,若其中有一项给定值,后续的项是在该值上继续加一,如上图中一月为0,二月为1,三月给定值为1000,四月则为在其基础上加一为1001。
3.枚举中每一项的数据类型为枚举名称,例如一月的类型enumtype为month。
二、枚举类型中常用的方法
1、Getvales
该方法是获取枚举中各枚举项组成的数组,数组中数据类型为枚举类型(enumtype)。
Console.WriteLine(typeof(month)); foreach (month item in Enum.GetValues(typeof(month))) { Console.WriteLine((int)item); }
输出结果为:
0 1 1000 1001
枚举类型是枚举项名称+枚举项的值
其中item为month为枚举类型名称,item为枚举类型中的每一项其数据类型仍为month,需要注意的是item的类型不能用Var推断类型定义,否则无法转为int输出枚举项的值。
简单介绍:
typeof:获取类型的位置,typeof(month)则为month命名空间下的位置,我们可以获得类型的名称,即名称空间名称,不适用于变量或实例,对于变量名称的获取可以用gettype()。
2、Getnames
该方法是获取枚举中各枚举项名称组成的数组,其数据类型是string类型。
foreach (var item in Enum.GetNames(typeof(month))) { Console.WriteLine(item); }
其输出结果为:
一月 二月 三月 四月
该方法与getvalues的最大不同是返回数组的数据类型不同,该类型是string,getvales返回的是枚举类型。
3、IsDefined
该方法是确定枚举项中有没有某个枚举项名称,如果存在则输出true,否则为false。
Console.WriteLine(Enum.IsDefined(typeof(month), "abc")); Console.WriteLine(Enum.IsDefined(typeof(month), "三月"));
输出结果为:
false true
4、Parse
用某个字符串代替枚举中某枚举项。
month k= (month)Enum.Parse(typeof(month),"三月"); Console.WriteLine((int)k);
定义一个枚举类型实例K,将枚举项三月值传递给k;
输出结果为:
1000
三、总结
枚举其实是自己定义一种类型,该种类型是枚举项+数字的组合。
枚举的名称是string,值为int;
枚举类型可以和int类型强制转换,如何输出是枚举类型,则输出结果为string,即为枚举项的名称,如何强制转为int类型,则输出的为枚举项的值。
完整代码:
using System; namespace test { //创建枚举类型 public enum month : ushort { 一月, 二月, 三月=1000, 四月 } public class qiao { static void Main(string[] args) { var a = ((int)month.四月); string m = "三月"; month k= (month)Enum.Parse(typeof(month),m); Console.WriteLine((int)k); Console.WriteLine(Enum.IsDefined(typeof(month), "abc")); Console.WriteLine(Enum.IsDefined(typeof(month), m)); Console.WriteLine(Enum.IsDefined(typeof(month), "三月")); Console.WriteLine(typeof(month)); foreach (month item in Enum.GetValues(typeof(month))) { Console.WriteLine((int)item); } foreach (var item in Enum.GetNames(typeof(month))) { Console.WriteLine(item); } Console.ReadKey(); } }
输出结果: