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

枚举的作用

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

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

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

总结

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于物联网的低成本便携式传感器节点用于火灾和空气污染的检测与报警

目录 摘要 引言 材料和方法 传感器节点 IoT 微控制器 颗粒物传感器 环境和气体传感器 MQTT代理 Node-Red监控平台 系统结构 数据存储 工作描述 实验结果 讨论 结论 致谢 参考文献 这篇论文的标题是《Low-cost IoT-based Portable Sensor Node for Fire and Air…

数据要素大市场打开新局面——数字经济背景下中国特色的数据产权三权分置

前言 数字经济飞速发展的大背景下,无论是数据要素大市场还是数据资产入表的发展和落地,都需要以数据产权基本制度为保障。对数据产权给与恰当的权利定位,有助于让数据成为创造和捕获价值的新经济资源。数据的价值在于使用,而传统…

链表leetcode-1

目录 1.常用技巧 1.1引入虚拟头结点 1.2对于变量,不要太吝啬,可以多定义,方便处理 1.3快慢双指针 2.例题 2.1两数相加 2.2两两交换链表中的节点 2.3重排链表 2.4合并K个升序链表 2.5K个一组翻转链表 1.常用技巧 1.1引入虚拟头结点 可…

【HTTP、Web常用协议等等】前端八股文面试题

HTTP、Web常用协议等等 更新日志 2024年9月5日 —— 什么情况下会导致浏览器内存泄漏? 文章目录 HTTP、Web常用协议等等更新日志1. 网络请求的状态码有哪些?1)1xx 信息性状态码2)2xx 成功状态码3)3xx 重定向状态码4&…

场景是人工智能第四要素,是垂直领域人工智能的第一要素。

"场景是人工智能的第四要素,与数据、算力、算法同等重要。"拿着技术找场景,还是拿着场景找技术?这个锤子和钉子的问题,一直困扰着各家AI大厂。从近5年的实践来看,拿着场景找技术是更为稳健的,否则…

哪款宠物空气净化器能更好的清理浮毛?希喂、352、IAM测评分享

家里这三只可爱的小猫咪,已然成为了我们生活中不可或缺的家庭成员,陪伴我们度过了说长不长说短不短的五年时光。时常庆幸自己当年选择养它们,在我失落的时候总能给我安慰,治愈我多时。 但这个温馨的背后也有一点小烦恼&#xff0…

ES6语法详解

以下是ES6常用的一些语法和特性: 声明变量的关键字变化:使用let和const、var来声明变量。 箭头函数:使用箭头(>)定义函数,简化函数的写法。 模板字符串:使用反引号(&#xff0…

Numpy中zeros、ones、empty的用法

目录 numpy基础介绍实例分析及结论 numpy基础介绍 Numpy 补充了Python语言所欠缺的数值计算能力,是其它数据分析及机器学习库的底层库。因其完全标准C语言实现,运行效率充分优化。最重要一点是开源免费。numpy的核心是矩阵(即多维数组)。 实…

【java入门】关键字、标识符与变量初识

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

Android 14(API 级别 34)中,DexClassLoader 不再支持可写 dex/jar 文件

Android 14(API 级别 34)中,DexClassLoader 不再支持从可写文件加载 dex/jar 文件。这意味着从Android 14开始,你不能再使用 DexClassLoader 来动态加载位于内部存储中的dex/jar文件,除非这些文件被设置为只读。 解决…

Python统计FreeMind测试用例数量

1.编写背景 由于最近编写迭代测试报告时发现缺少测试用例数量的统计,为了更好地分析迭代测试质量,需统计测试用例与bug的数量占比,故编写此脚本用于统计测试用例的数量(现测试用例编写工具为飞书思维导图,其导出格式为freemind) …

Docker Elasticsearch安装ik分词插件教程

本章教程在通过Docker 安装Elasticsearch,并安装ik分词插件。本文的重点是安装ik分词插件。 一、安装Elasticsearch 安装教程以前写过,参考:https://blog.csdn.net/qq_19309473/article/details/140725121 安装之后,通过http://ip:9200,可以访问,就表示安装成功。 二、安装…

c++学习笔记(5)

151、模板类的示例-栈 示例&#xff1a; #include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。 // typedef string DataType; // 定义栈元素的数据类型。 template <class DataType> class Stack // 栈类 { private: DataType* item…

Linux终端简单配置(Vim、oh-my-zsh和Terminator)

文章目录 0. 概述1. 完整Vim配置2. Vim配置方案解释2.1 状态行与配色方案2.2 文件管理与缓存设置2.3 搜索与导航优化2.4 缩进与格式化设置2.5 粘贴模式快捷切换2.6 文件编码与格式2.7 性能优化 3. 安装 Oh My Zsh 及配置3.1 安装 Oh My Zsh3.2 Oh My Zsh 配置 3. Terminator终端…

vscode +STM32 VS CODE EXTENSION

stm32 vs code extersion 1.0.0版本可以直接导入cubeide的工程&#xff0c;之后版本不可以&#xff0c;所以为了省事&#xff0c;使用stm32 vs code extersion 1.0.0插件。 安装完stm32 vs code extersion插件&#xff0c;会默认把相关插件一起安装。但是需要手动安装Ninja&am…

交叉编译概念

交叉编译概念 目录 交叉编译概念1. 什么是交叉编译2. 交叉编译的作用3. 交叉编译器4. 交叉编译工具链5. 交叉编译的一般步骤6. 交叉编译实例 1. 什么是交叉编译 交叉编译是指在一个平台上编译代码&#xff0c;使其能够在另一个不同的平台上运行的过程。这种编译方式通常用于开…

Android12——Launcher3文件夹布局修改调整

文章声明&#xff1a;本文是笔者参考良心大佬作品后结合实际需求进行相应的定制&#xff0c;本篇主要是笔者记录一次解析bug笔记&#xff0c;文中可能会引用大佬文章中的部分图片在此声明&#xff0c;并非盈利目的&#xff0c;如涉嫌侵权请私信&#xff0c;谢谢&#xff01; 大…

果蔬识别系统性能优化之路

目录 一级目录二级目录三级目录 前情提要当前问题 优化方案1. 内存化2. 原生化3. 接口化 行动实现结语 一级目录 二级目录 三级目录 前情提要 超详细前端AI蔬菜水果生鲜识别应用优化之路 当前问题 indexddb在webview中确实性能有限&#xff0c;存储量上来后每次读取数据…

【机器学习】交通勘测

交通勘测 交通勘测中的关键应用场景 交通勘测中常用的数据来源 交通勘测中的挑战 结论 &#x1f388;边走、边悟&#x1f388;迟早会好 机器学习在交通勘测中的应用非常广泛&#xff0c;可以用于交通流量预测、事故检测、车辆分类、道路拥堵管理等多个方面。通过结合传感…

什么是函数调用约定?

目录 前言 一、函数调用约定的主要内容 二、常见的函数调用约定 1. __cdecl&#xff08;C Declaration&#xff09; 2. __stdcall&#xff08;Standard Call&#xff09; 3. __fastcall&#xff08;Fast Call&#xff09; 4. __thiscall&#xff08;This Call&#xff0…