返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2080|回复: 0

[原创] 【原创】枚举讲解篇

[复制链接]
发表于 2021-1-3 23:19:50 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
本帖最后由 da11 于 2021-1-11 12:24 编辑

    class Program
    {
        /*简单枚举:
           * · 列举某种数据的所有取值
           * · 作用:增强代码的可读性,限定取值
           * · 语法:enum 枚举变量
           *      {
           *          枚举值1=实际的值
           *          枚举值2=实际的值
           *       }
           * · 枚举元素默认为int,准许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long、ulong
           * · 每个枚举元素都是有枚举值。默认情况下,第一个枚举的值为0,
           * 后面每个枚举的值依次递增1,可以修改值,后面枚举数的值依次递增
           *
           *
           */

        //枚举的定义:
        //枚举可以理解为,左边为标签,右边为实际的值
        //定义枚举的时候,后面可以跟上数据类型
        enum MoveFX : int
        {
            Up = 0,
            Down = 1,
            Left = 2,
            Right = 3
        }

        //枚举讲解主Main
        private static void Main()
        {
            int[,] GameMaxSZ = new int[4,4]
            {
                {1,0,2,5},
                {4,2,7,3},
                {1,2,8,5},
                {0,9,3,2}
            };

            MoveSF(GameMaxSZ, MoveFX.Left);

            Console.ReadLine();

        }


        //用以下这个方法调用枚举的标签,用于2048的移动方法
        private static void MoveSF(int[,] GameMaxSZ, MoveFX FX)
        {
            switch (FX)
            {
                case MoveFX.Up:
                    Console.WriteLine("调用移动方法上");
                    break;
                case MoveFX.Down:
                    Console.WriteLine("调用移动方法下");
                    break;
                case MoveFX.Left:
                    Console.WriteLine("调用移动方法左");
                    break;
                case MoveFX.Right:
                    Console.WriteLine("调用移动方法右");
                    break;
                default:
                    break;
            }
        }
    }
 楼主| 发表于 2021-1-11 14:25:34 | 显示全部楼层
本帖最后由 da11 于 2021-1-11 15:03 编辑

此外,还可以在此项目新建一个枚举专有的cs文件,用来装门存放枚举的方法:

1.在此项目中新建一个类文件




2.选择类文件



3.在此文件写上枚举算法,注意,此处没有class的定义语法



4.调用cs文件的枚举算法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 15:54:22 | 显示全部楼层
//进阶枚举的定义及讲解--创建一个专门存放枚举的cs文件,并cs和枚举命名为JJMJ

    //进阶枚举-标记枚举

    [Flags]  //定义枚举时,在定义枚举前使用[Flags]修饰,证明此枚举为可多选的枚举
    enum JJMJ:int
    {
        old = 1,        //00000001
        yound = 2,      //00000010
        baby = 4,       //00000100
        man = 8,        //00001000
        woman = 16      //00010000
        /*
        old = 0,        //00000000
        yound = 1,      //00000001
        baby = 2,       //00000010
        man = 3,        //00000011
        woman = 4       //00000100
        */
    }

    /*一、选择多个枚举值
     *  运算符 | (按位或):两个对应的二进制位中有一个为1,结果位为1
     *  old | yound ==>  00000000 | 00000001
     *
     * 但按照如下:
     *         old = 0,        //00000000
               yound = 1,      //00000001
               baby = 2,       //00000010
               man = 3,        //00000011
               woman = 4       //00000100
     *
     * 当使用运算符 | (按位或)做多个枚举值比较时,就会出现结果位为1的重叠
     * 怎样避免结果位为1的重叠呢,用以下条件限制:
     * 条件1:
     *      任意多个枚举值做 | 运算的结果不能与其他枚举值相同,列举枚举时,可以使用以下方法:
     *         old = 1,        //00000001
               yound = 2,      //00000010
               baby = 4,       //00000100
               man = 8,       //00001000
               woman = 16      //00010000
               。。。= (2的n次方)
     *         
     * 条件2:(标记枚举)
     *      定义枚举时,在定义枚举前使用[Flags]修饰,证明此枚举为可多选的枚举
     *      注:不写修饰时,只使用条件1,此枚举也可以多选,但是代码可读性会变差,此修饰为行业潜规则。
     *      
     * 二、判断标志枚举是否包含指定枚举值
     * 运算符 & (按位与):两个对应的二进制位中都为1,结果位为1
     * 00000011 & 00000001 ==>  00000001
     *
     * 注:其余运算符请查百度,关键字“按位运算符”
    */

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 15:56:13 | 显示全部楼层
        //主程序cs文件写入
        //进阶枚举调用主Main-标记枚举(多选枚举)
        private static void Main()
        {
            JJMJFF(JJMJ.man | JJMJ.woman);


            //数据类型转换
            //当某种时候出现只会出现int数值调用枚举时,则需要显示类型转换,显示转换括号中的类型为(enum)枚举类型
            //int --> enum
            //2 --> JJMJ.yound
            JJMJFF((JJMJ)2);

            //enum --> int
            //JJMJ.yound --> 2
            int a = (int)JJMJ.yound;   //获取了JJMJ.yound的值
            int b = (int)JJMJ.man | (int)JJMJ.woman;  //获取了JJMJ.man的值和JJMJ.woman的值,通过按位或算出来的结果

            //string --> enum
            //yound --> JJMJ.yound
            //字符串转换成枚举使用以下方法,后面有场景使用时,将会进阶讲解
            JJMJ ver = (JJMJ)Enum.Parse(typeof(JJMJ), "yound");

            //enum --> string
            //JJMJ.yound -> yound
            string S1 = JJMJ.yound.ToString();
            Console.WriteLine(S1);

            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.ReadLine();

        }


        //判断多选枚举配合的方法
        private static void JJMJFF(JJMJ ver)
        {
            //(00000001 & 00000010) == 00000001 ?
            //(00000001 & 00000100) != 0 ?

            if ((ver & JJMJ.old) == JJMJ.old)
            {
                Console.WriteLine("这是个老人");
            }
            if ((ver & JJMJ.yound) == JJMJ.yound)
            {
                Console.WriteLine("这是个年轻人");
            }
            if ((ver & JJMJ.baby) !=0)
            {
                Console.WriteLine("这是个婴儿");
            }
            if ((ver & JJMJ.man) !=0)
            {
                Console.WriteLine("这是个男士");
            }
            if ((ver & JJMJ.woman) !=0)
            {
                Console.WriteLine("这是个女士");
            }
            Console.ReadLine();
        }

回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表