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");

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

相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰10 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪10 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy11 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom12 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom12 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试