.Net枚举类型小结

1.枚举类型的要点:

(1)类型声明语法: enum 枚举名

(2)枚举体语法: a.成员名称 = 整数值,其他成员名称,或者其他成员与整数的表达式  b.成员之间需要用逗号隔开

(3)枚举可以继承的类型:byte、sbyte、short、ushort、int、uint、long 或 ulong

(4)枚举多个成员可以共享一个值

(5)枚举的默认值规则:第一成员没有显示设定值,那么其默认值是0,后面的项依次加1;如果后面的某个成员设定了值,那么这个值后面的成员是他的值后面依次加1

(6)获得枚举成员的字符串值:方法1:枚举.成员.ToString()   方法2:Enum.GetName()   方法:Enum.GetValues     

(7)获得枚举成员的整数值:强制转化枚举成员,即:(int)枚举.成员

(8)枚举一般有两种用法,一是表示唯一的元素序列,例如一周里的各天;还有就是用来表示多种复合的状态。这个时候一般需要为枚举加上[Flags]特性标记为位域.

(9)组合多个枚举状态的方法:或运算,枚举成员 | 枚举成员;从组合状态中去掉一个元素的方法,用"^"运算符可以做到,枚举变量 ^ 枚举变量的一个成员

2.枚举类型的优点:Enums是在栈中而不是堆中建立起来的数值类型,这样运行的程序需要更少的处理器和内存的资源,你无需使用new来建立一个Enum类型。

3.Demo:

   1:      class Program
   2:      {
   3:          public enum Test : int //正确
   4:          {
   5:              ok=10000,
   6:              no=20000
   7:          }
   8:          //public enum Test3 : string//错误,枚举能够继承的类型:byte、sbyte、short、ushort、int、uint、long 或 ulong    
   9:          //{
  10:          //    ok=10000,
  11:          //    no=20000
  12:          //}
  13:          //public enum Test2 : byte//错误,超出byte的范围
  14:          //{
  15:          //    ok=10000,
  16:          //    no=20000
  17:          //}
  18:          //public enum Test5 : Test//错误,不允许整数以外类型继承
  19:          //{
  20:          //    ok=10000,
  21:          //    no=20000
  22:          //}
  23:          [Flags]
  24:          public enum Test4
  25:          {
  26:              ok,//无值的话,第一个成员默认是0
  27:              no,//值默认为1
  28:              yes=100,
  29:              yesyes,//值为101
  30:              nono=yesyes+100,
  31:              okok=yes+yes,
  32:              ook = ok//多个成员可以共享一个值
  33:          }
  34:          static void Main(string[] args)
  35:          {
  36:              Console.WriteLine((int)Test4.ok);//获得枚举名称的整数值只需强制转换即可
  37:              string str = Test4.ok.ToString();//获得枚举的名称字符串,使用ToString()
  38:              Console.WriteLine(str);
  39:              Console.WriteLine(Enum.GetName(typeof(Test4),0));
  40:              Console.WriteLine("*****Enum类方法***************************");
  41:              foreach (var item in Enum.GetValues(typeof(Test4)))
  42:              {
  43:                  Console.WriteLine(item);
  44:                  Console.WriteLine((int)item);
  45:              }
  46:              Console.WriteLine("*****Flags特性*********************************************");
  47:              Test4 tt = Test4.no | Test4.yes;//组合2个成员
  48:              Console.WriteLine(tt);//如果有Flags属性,值为:no,yes,没有Flag属性,值为:yesyes
  49:              Console.WriteLine((int)tt);//值为二者之和 101=100+1
  50:              tt = tt ^ Test4.yes;//去掉组合中的一个成员
  51:              Console.WriteLine(tt);
  52:              Console.WriteLine((int)tt);//值为1
  53:              Console.ReadKey();
  54:          }
  55:      }

图一:有Flags属性                                                    图二:无Flags属性

image                                        image

4.参考资料:

http://www.west263.com/www/info/21458-1.htm

http://www.cnblogs.com/BillySir/archive/2012/02/15/2353395.html

http://www.189works.com/article-48463-1.html

http://gaoling386.blog.163.com/blog/static/54046024201261793458830/

http://blog.csdn.net/aoyux/article/details/173451

http://kb.cnblogs.com/page/42561/

原文地址:https://www.cnblogs.com/youchun/p/3381754.html