zoukankan      html  css  js  c++  java
  • 对枚举的认识,应用,以及用枚举变量传输多个概念的小技巧!

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

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

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

  • 相关阅读:
    Can't remove netstandard folder from output path (.net standard)
    website项目的reference问题
    The type exists in both DLLs
    git常用配置
    Map dependencies with code maps
    How to check HTML version of any website
    Bootstrap UI 编辑器
    网上职位要求对照
    Use of implicitly declared global variable
    ResolveUrl in external JavaScript file in asp.net project
  • 原文地址:https://www.cnblogs.com/flyant/p/4437311.html
Copyright © 2011-2022 走看看