当前位置: 首页 > article >正文

C#基础(2)枚举

前言

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

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

基本概念

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

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

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

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

4.申明枚举的语法

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

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

5.枚举的使用

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

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类型的互相转换。以下是一个简单的示例:

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,并将结果打印出来。

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

3
Green

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

 2.枚举和string的互转

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

枚举的作用

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

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

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

总结

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

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

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


http://www.kler.cn/news/293402.html

相关文章:

  • 工作流之Activiti7 和BPMN讲解
  • Elastic Stack--ES集群加密及Kibana的RBAC实战
  • 报错:Reached the max session limit(DM8 达梦数据库)
  • 【C语言】---- 复合数据类型之结构体(Struct)
  • 期权虚值和实值的投资风险有什么不同?
  • docker 安装mongoDB
  • Anchor Alignment Metric来优化目标检测的标签分配和损失函数。
  • Apache CloudStack Official Document 翻译节选(十三)
  • 使用多尺度C-LSTM进行单变量时间序列异常检测
  • 细胞因子系列
  • 92. UE5 GAS RPG 使用C++创建GE实现灼烧的负面效果
  • 嵌入式学习(链式栈和链式队列)
  • yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计
  • Docker基本使用:创建clickhouse容器
  • OKRs-E 目标管理上手指南
  • 电脑错误mfc140.dll丢失怎么办?mfc140.dll丢失如何修复?
  • 使用docker调试odoo
  • 并行编程实战——TBB的安装
  • Go语言实战 pdf
  • 2、硬件工程师笔试面试汇总
  • 实时渲染技术的崛起:游戏与实时交互的新篇章
  • ISO26262和Aspice之间的关联
  • OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用
  • Qt/QML学习-Calendar
  • 探秘DevSecOps黄金管道,安全与效率的完美融合
  • Golang | Leetcode Golang题解之第391题完美矩形
  • 实战docker第一天——windows安装docker,测试,并解决被墙办法
  • 【最后一轮征稿】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)
  • Oracle同一台服务器创建多个数据库
  • 计算机毕业设计选题推荐-中华诗词文化交流平台-Java/Python项目实战