标签:
枚举是一种很好用的数据类型.
enum TEST //定义一个枚举类型 { goodboy=0, goodboy2, girl, girl2, haha }
常见的对枚举取值的操作
var names = Enum.GetNames(typeof (TEST)); string sa = ""; foreach (var item in names ) //遍历枚举的名称 { sa += item + Environment.NewLine; }
输出为:
goodboy
goodboy2
girl
girl2
haha
TEST test2 = TEST.goodboy; var values = Enum.GetValues(test2.GetType()); //和test2.GetType()和typeof (TEST)获得的值是一样的 button1.Text = ((int)values.GetValue(3)).ToString(); foreach (var item in values) //默认页是输出为字符串 { sa += item + Environment.NewLine; } foreach (int item in values ) //转化为int类型 { sa += item + Environment.NewLine; } textBox1.Text = test2.ToString() + Environment.NewLine; textBox1.Text = sa;
输出为:
goodboy
goodboy2
girl
girl2
haha
0
1
2
3
4
上面都是很基本的一些操作,这里再看看 TEST.goodboy2 ,TEST.girl2 和TEST.goodboy ,TEST.girl的区别。以此引申出枚举的一些特殊应用
在有的应用中,我们期望一个变量值能表达多个含义,比如当我获得一个人时,我期望知道他的性别,身高,爱好,最好的方案是创建一个CLASS,然后在里面定义性别,身高,爱好。
class PERSON { public string sex; public string height; public string liker; }
但是,这种传统的方法不仅需要写很多行代码,并且代码编写过程中,很难确定得到的这个人具体属性。或许我们想要的变量人并不复杂,只是简单的一些指定特性,那么完全可以使用枚举来实现判断,而且了为了方便简单,也完全可以取巧用一个枚举值表示,这样代码功能就能够更快的实现。
enum PERSON { 男_看书_年龄20, 女_唱歌_年龄20, 男_唱歌_年龄30, 女_看书_年龄30, 男, 女, 唱歌, 看书, 年龄20, 年龄30 } public void deal(PERSON pp) //下面case的每一项不是我手打的,是vs2010的switch自动弹出来的 这叫一个快! { switch (pp) { case PERSON.男_看书_年龄20: break; case PERSON.女_唱歌_年龄20: break; case PERSON.男_唱歌_年龄30: break; case PERSON.女_看书_年龄30: break; case PERSON.男: break; case PERSON.女: break; case PERSON.唱歌: break; case PERSON.看书: break; case PERSON.年龄20: break; case PERSON.年龄30: break; default: break; } }
在代码频繁变动时,上面的deal方法是没法自动生成的,因为我们随时都可能向枚举PERSON添加新的枚举常量,我们要判断一个枚举变量是否包含“男”的特性时,可以使用pp.ToString().Contains(PERSON.男.ToString())来判断,同理pp.ToString().Contains(PERSON.女.ToString())也是如此。
这样的好处是什么呢?
在小规模的,指定个值的软件功能中:
可以使用单一变量pp传输所有的可能的值,包括复合值,避免使用了集合,数组来罗列,并且单一变量pp都还可以转化为int值.也就是无论我定义一个PERSON时包含有多少特性,它需要的存储变量始终和一个特性时是相同的,存储空间也是相同的。
相反如果你使用class 来处理,那么就涉及到多种变量类型,并且它们之间的转化可能还需要单独写方法,写识别流程.
在最近的一个小功能实现中,我需要通过网络传输一个类型的多重概念标识,如果用常规的方法,不仅增大了每次的数据传输量,而且需要写更多的代码判断,转化,而如果是ENUM类型,感觉就是很轻松很快速地实现功能!
所以,我觉得,有的时候,为了加快速度,有些取巧是应该采用的!
标签:
原文地址:http://www.cnblogs.com/flyant/p/4437311.html