C#基础知识-枚举

目录

枚举

1.分类

1.1普通枚举

1)默认情况

2)指定起始值

[1.2标志枚举(Flag Enum)](#1.2标志枚举(Flag Enum))

位运算符与标志枚举

1)组合标志

2)检查标志

2.枚举与不同类型之间的转换

1)枚举->整型

2)整型->枚举

3)枚举->字符串

4)字符串->枚举


本篇文章来分享一下C#的基础知识,主要讲述一下枚举。想要了解数据类型的相关知识的可以查看C#基础知识-.NET,变量,容量单位,数据类型

枚举

一般情况下,可以将枚举理解为用于定义一组命名的整型常量。

1.分类

1.1普通枚举

普通枚举用于列举某种数据的所有取值,可以增强代码的可读性,限定取值。枚举元素默认为int,准许使用的枚举类型有byte,sbyte,short,ushort,int,unit,long或ulong。每个枚举元素都有值,默认情况下,第一个枚举值为0,后续值依次递增,可以修改值。

1)默认情况

默认情况下,第一个枚举值为0,后续值依次递增。

cs 复制代码
public enum DayOfWeek
{
    Sunday,    // 0
    Monday,    // 1
    Tuesday,   // 2
    Wednesday, // 3
    Thursday,  // 4
    Friday,    // 5
    Saturday   // 6
}

2)指定起始值

可以通过显式指定某个枚举成员的值来改变默认的顺序。

cs 复制代码
public enum ErrorCode
{
    None = 0,
    NotFound = 404,
    ServerError = 500
}

1.2标志枚举(Flag Enum)

标志枚举是指用[Flag]特性修饰的枚举,表示可以组合的位标志。通过使用位运算,标志枚举允许使用单个枚举值来表示多个状态。要创建标志枚举,通常会将每个枚举成员的值设置为2的n次方,这样可以确保它们在二进制表示中是互斥的。

位运算符与标志枚举

1)组合标志

选择多个枚举值,按位|(两个对应的二进制位中有一个1,结果位为1),注意任意多个枚举值做|运算的结果不能与其他枚举值相同(值以2的n次方递增)

2)检查标志

判断标志枚举是否包含某个枚举值,按位&(两个对应的二进制位中都为1,结果位为1)

cs 复制代码
using System;
using UnityEngine;

public class Test : MonoBehaviour
{
    [Flags]
    public enum PersonStyle
    {
        tall = 1,     //00000001
        rich = 2,     //00000010
        handsome = 4, //00000100
        white = 8,    //00001000
        beautiful = 16//00010000
    }
    private void Start()
    {
        //选择多个枚举
        PersonStyle person = PersonStyle.tall | PersonStyle.rich | PersonStyle.handsome;
        Debug.Log(person);

        PersonStyle style = PersonStyle.white | PersonStyle.rich | PersonStyle.beautiful;
        PrintPersonStyle(style);
    }

    private static void PrintPersonStyle(PersonStyle style)
    {
        //判断是否包含
        if ((style & PersonStyle.tall) == PersonStyle.tall)
        {
            Debug.Log("高");
        }
        if ((style & PersonStyle.rich) == PersonStyle.rich)
        {
            Debug.Log("富");
        }
        if ((style & PersonStyle.handsome) == PersonStyle.handsome)
        {
            Debug.Log("帅");
        }
        if ((style & PersonStyle.white) != 0)
        {
            Debug.Log("白");
        }
        if (style.HasFlag(PersonStyle.beautiful))
        {
            Debug.Log("美");
        }
    }
}

总结:

1)普通枚举:用于表示一组相关的常量,默认从0开始递增。

2)标志枚举:用于表示可以组合的位标志,允许使用位运算来组合和检查多个状态。通常使用 [Flags] 特性标记以表明该枚举是一个标志枚举。

2.枚举与不同类型之间的转换

1)枚举->整型

cs 复制代码
PersonStyle tall = PersonStyle.tall;
int intValue = (int)value;

2)整型->枚举

cs 复制代码
int intValue = 1;
PersonStyle value = (PersonStyle)intValue;

3)枚举->字符串

cs 复制代码
string stringValue = value.ToString();

4)字符串->枚举

cs 复制代码
PersonStyle enumValue = (PersonStyle)Enum.Parse(typeof(PersonStyle), "tall");

好了,本次的分享到这里就结束啦,希望对你有所帮助~

相关推荐
东东5161 小时前
基于ssm的网上房屋中介管理系统vue
前端·javascript·vue.js
harrain2 小时前
什么!vue3.4开始,v-model不能用在prop上
前端·javascript·vue.js
睡美人的小仙女1277 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
fanruitian7 小时前
uniapp android开发 测试板本与发行版本
前端·javascript·uni-app
rayufo7 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk7 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向8 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
一起养小猫8 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9968 小时前
Java 所有关键字及规范分类
java·开发语言
java1234_小锋9 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言