C#-枚举

枚举,被命名的整型常量的集合,常表示 状态、类型。属于值类型数据

一:枚举的本质

枚举数字存储,以符号显示。每个枚举类型都有一个底层整数类型,默认为int。

枚举列表中的每个符号代表一个整数值,依次递增,默认第一个枚举符号的值为0。

但打印的是名称,而不是数值

修改顶层默认的值 enum Day{ Sun,Mon=10,Tue,...}

默认值:Sun是0,Mon是10,Tue是11

枚举中不可以有重复的枚举项,但是默认值可以相同

设置底层默认值类型

必须是整型

cs 复制代码
enum E_Color : ulong{
    Green,
    Red
}

枚举常用来处理逻辑,与Switch搭配更好。优点:在比较时,比较整数值,运行更快

二:枚举的定义和使用

cs 复制代码
class Enum_s{

    //声明枚举
    enum E_roleType{
        Mage,
        Archer,
        Tank
    }
        
    //声明枚举变量
    E_roleType roleType = E_roleType.Tank;

    switch(roleType){
      case E_RoleType.Mage:
        ...
      break;
      case E_RoleType.Archer:
        ...
      break;
      case E_RoleType.Tank:
        ...
      break;
    }
}

三:枚举成员的访问

3.1 以静态成员形式访问

枚举成员是静态的,即使没有该枚举类型的变量也可以访问。访问方式有2种。

cs 复制代码
enum E_Color{
    Green,
    Red
}

//方式一:
Console.WriteLine(E_Color.Green);

//方式二:使用 using static指令。【C# 6.0】

using static E_Color;
-------
Console.WriteLine(Green);
3.2 静态方法

GetName(); -> 返回与默认值对应的枚举成员

GetNames(); -> 返回该枚举中所以成员名称

cs 复制代码
enum E_color{
    Green,
    Red
}

public void Test(){

    Console.WriteLine(Enum.GetName(typeof(E_color),1)); //输出Red

    foreach(var name in Enum.GetNames(typeof(E_color))){
        Console.WriteLine(name); //输出 Green  Red
    }
}

四:枚举的类型转换

4.1 枚举 <-> int

使用括号强转。

作用:读取枚举项的默认值,将int型数据转为枚举项

cs 复制代码
E_RoleType roleType = E_RoleType.Mage;

int i = (int)roleType;//读取了Mage的默认值

//roleType = 20;//报错,不能通过类型转换的方式来修改枚举项的默认值


int type=int.Parse(Console.ReadLine());//输入30

E_QQType qqType=(E_QQType)type;//会直接将整型数据type存储为枚举项

Console.WriteLine($"You selected: {qqType}");//You selected: 30
4.2 枚举 <-> string
cs 复制代码
E_RoleType roleType = E_RoleType.Tank;

//枚举项 -> string
string str = roleType .ToString();//打印枚举项的名字 Tank,而不是数字

//string -> 枚举项

playerType = (E_RoleType)Enum.Parse(typeof(E_RoleType), "Tank2");

.Parse()转换完毕后是一个枚举的通用类型,我们需要用括号强转成我们想要的目标枚举类型

4.3 枚举 <-> 枚举

如果两个不同枚举类型具有相同的底层类型,或者其中一个是另一个的基类型,那么可以在它们之间进行显式转换。

cs 复制代码
enum E_Color { Red, Green, Blue }
enum E_LightColor { Red = 1, Green = 2, Blue = 3 }

Color color = Color.Red;
LightColor lightColor = (LightColor)color; // 显式转换

注意,枚举之间的转换应该基于它们之间的逻辑关系,而不是简单的类型转换。如果两个枚举之间没有明确的对应关系,那么转换可能没有意义,甚至可能导致错误。

五:枚举类型的比较

同一枚举类型之间可以比较。不同枚举类型之间不可以比较

cs 复制代码
enum E_Fist{
    Name1,
    Name2
}
enum E_Second{
    Name1,
    Name2
}
---------------------------
if(E_First.Name1 < E_First.Name2){} //不报错
if(E_First.Name1 < E_Second.Name2){} //报错
相关推荐
huaqianzkh1 天前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261352 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六2 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技2 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13142 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen3 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船3 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=03 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
波力海苔夹心脆6755 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端5 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭