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


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

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

    所以,我觉得,有的时候,为了加快速度,有些取巧是应该采用的!

  • 相关阅读:
    在CMD中使用for命令对单行字符串做分割的方法
    关于CMD/DOS中的短文件名规则
    [批处理]全盘搜索批量文件
    [批处理]批量提取MKV资源
    关于CMD中延迟环境变量嵌套的实现方法
    [批处理]自动按日期重命名文件名
    [批处理]手动伪造相机自动编号
    [批处理]简易命令行RAR
    [批处理]Oracle启动助手
    [批处理]强制删除文件及文件夹
  • 原文地址:https://www.cnblogs.com/flyant/p/4437311.html
Copyright © 2020-2023  润新知