码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-18 14:30:51      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

枚举是一种很好用的数据类型.

        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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!