C#基础(2)枚举

前言

我们其实在前面已经了解过枚举到底有什么作用,但是那毕竟是概念性的语言,理解起来很抽象,今天我们会具体来讲一讲枚举,并谈一谈它的应用。

希望你能从今天的C#基础中有所收获。

基本概念

1.枚举:是一个比较特别的存在,是被明明的整形常量集合

2.申明枚举:创建一个自定义的枚举类型

注意,这只是创建一个枚举类型,并没有实实在在创建一个枚举,这个概念在后续学习中也会反复出现。大家一定要辨别申明类型,和申明变量是两个完全不同的概念。

3.申明枚举变量:用一个定义的枚举类型去申明一个此枚举类型的变量。

4.申明枚举的语法

cs 复制代码
enum E_自定义枚举名//枚举名以E或E_开头,有些公司要求不同
{
    自定义枚举项名字1,
    自定义枚举项名字2,
    //枚举包裹的整型变量,第一个为0(默认),向下累加(只要后续值不声明,默认累加)
}

看到这个语法,你可能还是有点不清楚枚举到底怎么用,那么我们切切实实进一个例子来看。

5.枚举的使用

以下是一个使用C#编写的代码示例,用来展示如何使用枚举来模拟状态变化:

csharp 复制代码
using System;

public enum GameState
{
    Menu,
    Playing,
    Paused,
    GameOver
}

class Program
{
    static void Main(string[] args)
    {
        GameState currentState = GameState.Menu;

        while (true)
        {
            switch (currentState)
            {
                case GameState.Menu:
                    Console.WriteLine("Welcome to the game! Press any key to start.");
                    Console.ReadKey();
                    currentState = GameState.Playing;
                    break;
                case GameState.Playing:
                    Console.WriteLine("Playing the game.");
                    // 游戏逻辑代码
                    Console.WriteLine("Press P to pause or Q to quit.");
                    ConsoleKeyInfo input = Console.ReadKey();
                    if (input.Key == ConsoleKey.P)
                    {
                        currentState = GameState.Paused;
                    }
                    else if (input.Key == ConsoleKey.Q)
                    {
                        currentState = GameState.GameOver;
                    }
                    break;
                case GameState.Paused:
                    Console.WriteLine("Game paused. Press R to resume.");
                    ConsoleKeyInfo resumeInput = Console.ReadKey();
                    if (resumeInput.Key == ConsoleKey.R)
                    {
                        currentState = GameState.Playing;
                    }
                    break;
                case GameState.GameOver:
                    Console.WriteLine("Game over. Press any key to restart.");
                    Console.ReadKey();
                    currentState = GameState.Menu;
                    break;
            }
        }
    }
}

这个代码示例演示了一个简单的游戏状态变化过程。开始时,游戏状态为菜单状态。玩家按下任意键后,游戏状态变为Playing。在Playing状态下,玩家可以按下P键暂停游戏,按下Q键结束游戏。当游戏状态变为Paused时,玩家可以按下R键继续游戏。当游戏状态变为GameOver时,玩家可以按下任意键重新开始游戏。

我们的枚举在此的作用更多是为了定义游戏状态,我们可以发现,枚举的根本作用其实就是让代码看上去更易懂,如果我们把游戏状态改为数字,可能还要来回翻阅才能确定这个常量的真实含义,但是如果通过枚举的话,我们代码的阅读性就得到了大大的提升。

tips:枚举和switch天生一对

枚举声明提示

声明位置:

  1. namespace(命名空间)里
  2. class(类)语句块中
  3. struct(结构体)语句块中

tips:枚举不能再函数语句块中声明。

枚举类型转变

1.枚举和int互转

可以通过使用枚举类型的ToInt()方法和显式类型转换来实现枚举和int类型的互相转换。以下是一个简单的示例:

csharp 复制代码
using System;

public enum Color
{
    Red = 1,
    Green = 2,
    Blue = 3
}

public class Program
{
    public static void Main(string[] args)
    {
        Color color = Color.Blue;

        // 将枚举转换为int
        int colorValue = (int)color;
        Console.WriteLine(colorValue);

        // 将int转换为枚举
        int intValue = 2;
        Color enumValue = (Color)intValue;
        Console.WriteLine(enumValue);

        Console.ReadLine();
    }
}

在上面的示例中,我们首先声明了一个Color枚举,其中包含RedGreenBlue三个选项。然后,我们将Color.Blue赋值给一个color变量。接下来,我们使用显式类型转换将枚举类型转换为int类型,并将结果打印出来。然后,我们将一个int值2赋值给一个intValue变量,并将其转换为枚举类型Color,并将结果打印出来。

运行上面的代码,输出将是:

cs 复制代码
3
Green

可以看到,枚举类型Color.Blue转换为int类型之后的值是3,而int类型2转换为枚举类型之后的值是Green

2.枚举和string的互转

可以使用ToString的方法来实现枚举到string的转换,而string到枚举的转换大多是使用括号强转的方式,有点忘记的朋友可以回C#入门重新看一下。

枚举的作用

其实通过例子和之前的讲解,我们再一次做一个概括。

在游戏开发中,我们的对象一般都会有很多状态,不仅仅是游戏本身有暂停,游玩,退出这些,角色本身也有待机,行走,攻击等状态,那我们其实在切换状态的时候,就需要枚举来标明

枚举本身,也可以让我们在开发中更方便阅读,提高代码的可维护性,不至于过段时间看代码,就不知道这是谁写的了。

总结

其实学到这里,想必你已经掌握了枚举的基本用法和作用,我相信你在以后的开发中也会体会到枚举的好处。

还是那句话,学习路上,戒骄戒躁,脚踏实地。

请期待我下一篇博客,感谢你的观看。

相关推荐
好望角雾眠33 分钟前
第一阶段C#基础-10:集合(Arraylist,list,Dictionary等)
笔记·学习·c#
冒泡的肥皂1 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
繁星¹⁸⁹⁵3 小时前
通过update-alternatives可以实现cuda的多版本切换
服务器
薛晓刚5 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
开航母的李大5 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
星空下的曙光6 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12016 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色6 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql