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#入门重新看一下。

枚举的作用

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

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

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

总结

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

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

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

相关推荐
__water13 分钟前
『功能项目』战士的伤害型技能【45】
c#·unity引擎·战士职业伤害型技能
dbln27 分钟前
MySQL之表的约束
数据库·mysql
心勤则明32 分钟前
Netty配置SSL证书加密
服务器·https·ssl
isNotNullX41 分钟前
HBase在大数据实时处理中的角色
大数据·数据库·hbase
白总Server1 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
IT良1 小时前
while循环及简单案例
linux·服务器
码哝小鱼1 小时前
iptables限制网速
linux·服务器·网络
君莫愁。1 小时前
【Unity】检测鼠标点击位置是否有2D对象
unity·c#·游戏引擎
leaoleao沄1 小时前
linux-IO-进程-线程(相关函数)
linux·运维·服务器
iangyu2 小时前
linux命令之pwdx
linux·运维·服务器