前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[C#1] 7-枚举

[C#1] 7-枚举

作者头像
blackheart
发布2018-01-19 16:22:55
6120
发布2018-01-19 16:22:55
举报
文章被收录于专栏:blackheart的专栏

1.Enum

枚举是定义了一组符号名称和数值对,如下:

代码语言:javascript
复制
1 //byte、sbyte、short、ushort、int、uint、long 或 ulong    
2 enum Color : byte //默认是int
3 {
4     Red,//默认赋值为0
5     Yellow,//默认赋值为1
6     Blue,//默认赋值为2
7 }

枚举类型使程序更见容易阅读、编写和维护。每个枚举类型默认继承自 System.Enum,属于值类型,但是枚举不能定义任何方法、属性[本质 也是方法嘛]和事件。实际上枚举被编译时会把其中的每个符号转变为类型的一个常量字段,也就是0,1,2...会被硬编码进去。 而使用这些常量[0,1...]是以定义的字符代替的,以下是IL:

Blue项的IL:

代码语言:javascript
复制
.field public static literal valuetype ConsoleApplication1.Color Blue = uint8(0x02)

注意这个uint8,这个和上面写的Color:byte中的byte对应。这是枚举类型的基础类型每一个枚举都有一个基础类型[只可以是基元类型],C#默认是int。 Enum的静态方法Enum.GetUnderlyingType(Type enumType)返回枚举的基础类型。一些常用的方法:

代码语言:javascript
复制
 1 Color myc = Color.Blue;
 2 //ToString方法的格式化参数
 3 Console.WriteLine(myc.ToString());//"Blue"常规格式
 4 Console.WriteLine(myc.ToString("G"));//"Blue"常规格式
 5 Console.WriteLine(myc.ToString("D"));//"2"十进制格式
 6 Console.WriteLine(myc.ToString("X"));//"02"十六进制格式
 7  
 8 //将一个文本符号转化为枚举类型的实例:
 9 Color c = (Color)Enum.Parse(typeof(Color), "Blue");
10  
11 //返回一个枚举类型的中定义的所有符号:
12 Color[] myColorArray = (Color[])Enum.GetValues(typeof(Color));
13  
14 //返回一个枚举类型中每个符号的字符串形式组成的数据;
15 string[] myStrArray = Enum.GetNames(typeof(Color));
16  
17 //判定指定的一个数值是否位于指定枚举中
18 Console.WriteLine(Enum.IsDefined(typeof(Color),"Green"));//输出False
19 //第二个参数是object类型的,一般是写字符,或者基础类型的数值

2.位标记

System.FlagsAttribute特性,位标记可以是枚举表示一组标记,把上述Color代码改写成如下:

代码语言:javascript
复制
1 [Flags]
2 enum Color : byte
3 {
4     Red = 1,//2的次方...
5     Yellow = 2,
6     Blue = 4,
7 }

[Flags]特性会使得枚举支持&|运算。也会影响ToString方法的输出行为。

代码语言:javascript
复制
Color c = Color.Blue | Color.Yellow;
Console.WriteLine(c);//输出Yellow,Blue
 
//我们并没有定义基础类型值为3的符号
Color c = (Color)Enum.Parse(typeof(Color), "3");
//输出Red,Yellow
Console.WriteLine(c);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-03-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Enum
  • 2.位标记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档