zoukankan      html  css  js  c++  java
  • CLR_Via_C#学习笔记之枚举

    CLR_Via_C#学习笔记之枚举

    枚举类型(Enum)定义的一组"符号名称/值"配对;因为枚举类型使用程序更容易编写、阅读和维护,而且它是强类型;

    枚举是值类型;由System.Enum-->System.ValueType-->System.Object;有别于其他值类型是Enum不能定义任何方法、属性、或事件;

    枚举都有一个基础类型:byte,sbyte,short,ushort,int(C#默认选择的,最常用),unit,long,ulong;

    1:首先定义两个枚举

    复制代码
        public enum Limit
        {
            Write,
            Read,
            Delete,
            WriteAndRead,
            All
        }
    
        public enum byteLimt : byte
        {
            White,
            Red,
            Blue
        }
    复制代码

    若要查看枚举的类型可以通过Enum.GetUnderlyingType

                Console.WriteLine("Limit的类型:"+Enum.GetUnderlyingType(typeof(Limit)));
    
                Console.WriteLine("byteLimt的类型:"+Enum.GetUnderlyingType(typeof(byteLimt)));

    结果查看:

    2:枚举的几种不同格式输出:

                Limit limitRead = Limit.Read;
                Console.WriteLine(limitRead);
                Console.WriteLine(limitRead.ToString());
                Console.WriteLine(limitRead.ToString("G"));
                Console.WriteLine(limitRead.ToString("D"));  //十进制
                Console.WriteLine(limitRead.ToString("X"));  //十六进制

    结果查看:

    3:可以运用Enum的GetValues[返回Array]或GetName[返回string]、GetNames[返回string[]]查看,实例代码如下:

    复制代码
                Limit[] limitList = (Limit[])Enum.GetValues(typeof(Limit));
                Console.WriteLine("枚举的个数为:" + limitList.Length);
                foreach (Limit item in limitList)
                {
                    Console.WriteLine("值:{0} 名称:{1}", item.ToString("D"), item.ToString());
                }
    
                Console.WriteLine("通过GetName获得名称:"+Enum.GetName(typeof(Limit),1));
    
                string[] limitNameList = Enum.GetNames(typeof(Limit));
                foreach (string item in limitNameList)
                {
                    Console.WriteLine("名称:{0}", item);
                }
    复制代码

    结果查看:

    4:IsDefined方法来判断一个数值对于一个枚举类型是否合法,这样就可以防止一些不必要的异常

    复制代码
            public static void SetLimit(Limit item)
            {
                if (!Enum.IsDefined(typeof(Limit), item))
                {
                    Console.WriteLine("此枚举不包含");
                }
                else
                {
                    Console.WriteLine("此枚举存在");
                }
            }
    复制代码
                SetLimit((Limit)4);
                SetLimit((Limit)10);

    结果查看:

    5:平时代码中经常结合Switch进行判断,代码如下

    复制代码
            public static void LimitOperate(Limit item)
            {
                switch (item)
                {
                    case Limit.Read:
                        Console.WriteLine("此值为Read,值为:" + item.ToString("D"));
                        break;
                    case Limit.Write:
                        Console.WriteLine("此值为Write,值为:" + item.ToString("D"));
                        break;
                    case Limit.Delete:
                        Console.WriteLine("此值为Delete,值为:" + item.ToString("D"));
                        break;
                }
            }
    复制代码
                Limit newLimit = Limit.Read;
                LimitOperate(newLimit);

    结果查看:

    6:Enum还有一个位标志,必须在Enum增加一个[Flags]的特性就可以进行位运算,经常用它进行比如权限的判断等(1 & 0 = 0, 1 | 0 = 1, ~1 = 0);

    复制代码
        [Flags]
        public enum Permission
        {
            select = 1,
            Edit = 2,
            Delete = 4,
            View = 8,
            All = select | Edit | Delete | View
        }
    复制代码

    比如权限的加法:

                Permission per = Permission.View | Permission.select | Permission.Edit;
                Console.WriteLine("目前拥有的权限为:" + per.ToString("D"));

    权限的减法:

     per&=~Permission.select;
                Console.WriteLine("修改后所拥有的权限为:" + per.ToString("D"));

    权限的判断:

                if ((per & Permission.Edit) == Permission.Edit)
                {
                    Console.WriteLine("拥有权限Edit");
                }

    结果查看:

    感谢您的阅读,坚持每天进步一点点,离成功就更进一步;希望本文对您有所帮助;

     

     
     
     
  • 相关阅读:
    游戏方案
    团队介绍
    【面向对象程序设计】作业四
    FIFO与LRU实现(Java)
    spring事务介绍
    微信抢红包算法
    Hibernate Dao映射配置通用接口类反射获取加载calass实例
    股票两次买卖最大收益(java)
    Eclipse安装JD-Eclipse反编译插件看源码
    Java GC调优
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3428551.html
Copyright © 2011-2022 走看看