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

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;// 将枚举转换为intint 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#入门重新看一下。

枚举的作用

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

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

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

总结

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux系统安装MySQL8.0
  • ES6更新的内容中什么是proxy
  • 力扣8.29
  • React多功能管理平台项目开发全教程
  • C++ | Leetcode C++题解之第387题字符串中的第一个唯一字符
  • Go入门:gin框架极速搭建图书管理系统
  • MySQL:复合查询
  • 深度学习(二)
  • minio最新源码编译(处理安全扫描中跨域访问、.js.map等不安全问题)
  • SQLite3 数据类型深入全面讲解
  • 【PyQt】切换界面的实现
  • day-45 全排列 II
  • 【机器学习】循环神经网络(RNN)介绍
  • MySQL集群技术4——MySQL路由
  • 【大模型】Reflextion解读
  • JS数组方法汇总
  • node-glob通配符
  • RxJS: 简单入门
  • Zsh 开发指南(第十四篇 文件读写)
  • 计算机常识 - 收藏集 - 掘金
  • 如何优雅地使用 Sublime Text
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2015)JS ES6 必知的十个 特性
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)fgets与fputs函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (第二周)效能测试
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)软件测试分工
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)JAVA中的堆栈
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Framework .NET Core与 .NET 的区别
  • .NET Project Open Day(2011.11.13)
  • .Net 中Partitioner static与dynamic的性能对比
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET与 java通用的3DES加密解密方法
  • .vimrc 配置项
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [bzoj4240] 有趣的家庭菜园
  • [C++][opencv]基于opencv实现photoshop算法图像剪切
  • [C++]使用yolov10的onnx模型结合onnxruntime和bytetrack实现目标追踪