对枚举的认识,应用,以及用枚举变量传输多个概念的小技巧!
2015-04-18 13:48
281 查看
枚举是一种很好用的数据类型.
常见的对枚举取值的操作
goodboy
goodboy2
girl
girl2
haha
goodboy
goodboy2
girl
girl2
haha
0
1
2
3
4
上面都是很基本的一些操作,这里再看看 TEST.goodboy2 ,TEST.girl2 和TEST.goodboy ,TEST.girl的区别。以此引申出枚举的一些特殊应用
在有的应用中,我们期望一个变量值能表达多个含义,比如当我获得一个人时,我期望知道他的性别,身高,爱好,最好的方案是创建一个CLASS,然后在里面定义性别,身高,爱好。
但是,这种传统的方法不仅需要写很多行代码,并且代码编写过程中,很难确定得到的这个人具体属性。或许我们想要的变量人并不复杂,只是简单的一些指定特性,那么完全可以使用枚举来实现判断,而且了为了方便简单,也完全可以取巧用一个枚举值表示,这样代码功能就能够更快的实现。
在代码频繁变动时,上面的deal方法是没法自动生成的,因为我们随时都可能向枚举PERSON添加新的枚举常量,我们要判断一个枚举变量是否包含“男”的特性时,可以使用pp.ToString().Contains(PERSON.男.ToString())来判断,同理pp.ToString().Contains(PERSON.女.ToString())也是如此。
这样的好处是什么呢?
在小规模的,指定个值的软件功能中:
可以使用单一变量pp传输所有的可能的值,包括复合值,避免使用了集合,数组来罗列,并且单一变量pp都还可以转化为int值.也就是无论我定义一个PERSON时包含有多少特性,它需要的存储变量始终和一个特性时是相同的,存储空间也是相同的。
相反如果你使用class 来处理,那么就涉及到多种变量类型,并且它们之间的转化可能还需要单独写方法,写识别流程.
在最近的一个小功能实现中,我需要通过网络传输一个类型的多重概念标识,如果用常规的方法,不仅增大了每次的数据传输量,而且需要写更多的代码判断,转化,而如果是ENUM类型,感觉就是很轻松很快速地实现功能!
所以,我觉得,有的时候,为了加快速度,有些取巧是应该采用的!
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类型,感觉就是很轻松很快速地实现功能!
所以,我觉得,有的时候,为了加快速度,有些取巧是应该采用的!
相关文章推荐
- 线程范围内共享变量的概念与作用以及ThreadLocal类及应用修复bug
- 线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析
- Java枚举enum以及应用:枚举实现单例模式
- 浅谈对于RDD的认识 RDD(Resilient Distributed Datasets)弹性分布式数据集,是在集群应用中分享数据的一种高效,通用,容错的抽象,是Spark提供的最重要的抽象的概念
- 初学者对Linux和驱动的认识以及部分概念的意思
- 分布式(集群)的基本概念以及分布式的应用场景【转】
- 线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析
- Java Thread 的概念以及基础应用
- Flex环境中“帧”的概念以及应用
- JNDI的概念以及应用总结
- SVD的概念以及应用
- Spring---AOP基本概念以及Advice5种类型的通知注解应用实例
- 事务的基本概念和性质以及在magento中的应用
- .net序列化概念以及应用
- 黑马程序员------C语言中变量的概念,初始化和引用以及作用域
- 【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点
- 分治法的概念以及应用
- swift学习第一天:认识swift以及swift的常量和变量
- 全局变量显示网站的总访问人数以及当前访问人数(Application 和Session的应用)