您的位置:首页 > 其它

对枚举的认识,应用,以及用枚举变量传输多个概念的小技巧!

2015-04-18 13:48 281 查看
枚举是一种很好用的数据类型.

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类型,感觉就是很轻松很快速地实现功能!

所以,我觉得,有的时候,为了加快速度,有些取巧是应该采用的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: