返回首页
DA系统
C#IDE
文件同步服务
屏保
今天是: 2026-05-05 "立夏" 夏季的第一个节气,表示盛夏时节的正式开始
收藏
任务
排行
道具
勋章
站长QQ
QQ:979119776
如您使用论坛过程中发现任何问题
请点击下方添加站长QQ
联系站长
休闲区
BBS
技术区
C#IDE
文件同步服务
喝茶淡饭
音乐区
视频区
Linux技术交流
Unity 3D、C#技术交流
Windows技术交流
论坛BUG专区
玩家杂谈
BUG专区
建议专区
搜索
搜索
热搜:
linux
技术
Hi~
登录
或
注册
本版
帖子
用户
DA 论坛
»
休闲区
›
技术区
›
Unity 3D、C#技术交流
›
【原创】枚举讲解篇
返回列表
发新帖
查看:
2080
|
回复:
0
[原创]
【原创】枚举讲解篇
[复制链接]
da11
da11
当前离线
积分
68575
发表于 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;
}
}
}
回复
使用道具
举报
置顶卡
沉默卡
变色卡
da11
da11
当前离线
积分
68575
楼主
|
发表于 2021-1-11 14:25:34
|
显示全部楼层
本帖最后由 da11 于 2021-1-11 15:03 编辑
此外,还可以在此项目新建一个枚举专有的cs文件,用来装门存放枚举的方法:
1.在此项目中新建一个类文件
2.选择类文件
3.在此文件写上枚举算法,注意,此处没有class的定义语法
4.调用cs文件的枚举算法
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
注册成为修仙之旅的少年~
x
回复
支持
反对
使用道具
举报
da11
da11
当前离线
积分
68575
楼主
|
发表于 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
*
* 注:其余运算符请查百度,关键字“按位运算符”
*/
回复
支持
反对
使用道具
举报
da11
da11
当前离线
积分
68575
楼主
|
发表于 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();
}
回复
支持
反对
使用道具
举报
返回列表
发新帖
游客
回复
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册成为修仙之旅的少年~
发表回复
浏览过的版块
Linux技术交流
快速回复
返回顶部
返回列表