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天生一对
枚举声明提示
声明位置:
- namespace(命名空间)里
- class(类)语句块中
- 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枚举,其中包含Red、Green和Blue三个选项。然后,我们将Color.Blue赋值给一个color变量。接下来,我们使用显式类型转换将枚举类型转换为int类型,并将结果打印出来。然后,我们将一个int值2赋值给一个intValue变量,并将其转换为枚举类型Color,并将结果打印出来。
运行上面的代码,输出将是:
3
Green
可以看到,枚举类型Color.Blue转换为int类型之后的值是3,而int类型2转换为枚举类型之后的值是Green。
2.枚举和string的互转
可以使用ToString的方法来实现枚举到string的转换,而string到枚举的转换大多是使用括号强转的方式,有点忘记的朋友可以回C#入门重新看一下。
枚举的作用
其实通过例子和之前的讲解,我们再一次做一个概括。
在游戏开发中,我们的对象一般都会有很多状态,不仅仅是游戏本身有暂停,游玩,退出这些,角色本身也有待机,行走,攻击等状态,那我们其实在切换状态的时候,就需要枚举来标明。
枚举本身,也可以让我们在开发中更方便阅读,提高代码的可维护性,不至于过段时间看代码,就不知道这是谁写的了。
总结
其实学到这里,想必你已经掌握了枚举的基本用法和作用,我相信你在以后的开发中也会体会到枚举的好处。
还是那句话,学习路上,戒骄戒躁,脚踏实地。
请期待我下一篇博客,感谢你的观看。
相关文章:
C#基础(2)枚举
前言 我们其实在前面已经了解过枚举到底有什么作用,但是那毕竟是概念性的语言,理解起来很抽象,今天我们会具体来讲一讲枚举,并谈一谈它的应用。 希望你能从今天的C#基础中有所收获。 基本概念 1.枚举:是一个比较特…...
Linux之MySQL日志
前言 数据库就像一个庞大的图书馆,而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样,数据库日志帮助我们追溯数据的变更、定位问题和还原状态。 在MySQL中,日志是非常重要的一个组成部分,它记录了数据…...
Redis集群模式—主从集群、哨兵集群、分片集群
主从集群 主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,…...
并发工具类(二):CyclicBarrier
1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障,它也是一个同步助手工具,它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用,当屏障点值变为0之后,可以在接下来…...
Spring Cloud全解析:负载均衡之Ribbon简介
Ribbon简介 Ribbon是一种客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起,提供了一系列完善的配置如连接超时、重试等,Ribbon会自动的帮助基于某种规则(如简单轮询、随机连接等)去连接那些机器,也可以自定义的负载均衡…...
Kettle安装与使用指南
1. 介绍 什么是Kettle? Kettle,全称Pentaho Data Integration (PDI),是Pentaho BI套件的一部分。它提供了一个可视化的ETL工具,允许用户通过图形界面设计复杂的数据集成流程。Kettle支持多种数据源,包括关系型数据库…...
教育行业解决方案:智能PPT在教育行业的创新应用
在信息化时代,教育行业面临着巨大的变革。随着人工智能技术的不断发展,传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者,推出了歌者 PPT &彩漩 PPT,为教师、学生和家长提供了一种全新的教育体验,实现了…...
Matlab程序练习
Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序: 主文件:main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…...
cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?
废话:你的球是不是很丑?是不是没有科技感?是不是没有好看的影像? 因果: 因:客户问,底图可不可以改变颜色,想让球更漂亮一些。 答:可以改变影像饱和度,透明度…...
MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?
通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下: 通过注解配置的MappedStatement 核心逻辑就在这个里面了: 继承BaseMapper的MappedStatement 我们看看这个类,里…...
Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍
背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel,从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强,因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...
智能客服的四大优势,提升企业服务效率
在这个信息化快速发展的时代,客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求,于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式,还提高了服务效率和客户满意度。本文将深入探讨智能客…...
AutoGPT开源项目解读
AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统,能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md,下述代理和智能体两个名词可互换 项目简介:一个创建和运行智能体的工具,这些智能体…...
Linux离线安装fontconfig
Linux离线下载yum包,安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…...
海山数据库(He3DB)+AI:(一)神经网络基础
文章目录 1 引言2 基本结构2.1 神经元2.2 模型结构 3 训练过程3.1 损失函数3.2 反向传播3.3 基于梯度的优化算法 4 总结 1 引言 神经网络可以被视为一个万能的拟合器,通过深层的隐藏层实现输入数据到输出结果的映射。神经网络的思想源于对大脑的模拟,在…...
CSS中选择器有哪些?(史上最全选择器)
CSS选择器是用来选择和应用样式到HTML元素上的工具。以下是所有主要的CSS选择器的详细分类和描述: 1. 基本选择器 通配符选择器 (*):选择所有元素。例如,* { color: red; } 会将所有元素的文字颜色设置为红色。元素选择器:选择指…...
本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师
话接上篇: 本地部署 AI 智能体,Dify 搭建保姆级教程(上):工作流 Agent,把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享,继续介绍 Dify 的另外两项重要功能: 知…...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版
这篇文章是高级题库答案纯享版,只有需要选择的选项。如果需要查看所有选项,可以点击下方链接跳转。以考代学,还是推荐点击下方链接,查看完整的题库,边看边学习鸿蒙应用开发。此题库已更新完毕,笔者将不继续…...
基于PHP的文件包含介绍
引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作…...
K7系列FPGA多重启动(Multiboot)
Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...
springboot 微信小程序的校园新闻发布系统
目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分后台管理功能交互设计要点扩展性考虑项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户模块 微信授权登录个人…...
Ubuntu服务器一键部署Qwen3-ASR-0.6B:高可用语音识别服务搭建
Ubuntu服务器一键部署Qwen3-ASR-0.6B:高可用语音识别服务搭建 语音识别技术正在从实验室走向生产环境,成为许多应用不可或缺的一部分。想象一下,你需要为客服系统、会议记录工具或者智能设备添加“听懂人话”的能力,自己从零开始…...
WaveTools鸣潮工具箱:3大核心功能让你告别卡顿,科学抽卡不迷路
WaveTools鸣潮工具箱:3大核心功能让你告别卡顿,科学抽卡不迷路 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》PC版,一定经历过游戏卡顿、帧率限制…...
如何通过手机号快速找回QQ号:开源工具的3分钟解决方案
如何通过手机号快速找回QQ号:开源工具的3分钟解决方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在数字生活中,你是否曾因忘记QQ账号而焦急万分?手机更换、系统重装或长期未登录,…...
Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术
Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcod…...
gemma-3-12b-it惊艳案例:古籍插图识别+文言文释义+现代白话转述三合一
gemma-3-12b-it惊艳案例:古籍插图识别文言文释义现代白话转述三合一 1. 引言:当AI遇见古籍智慧 想象一下,你面前摆着一本泛黄的古籍,上面既有精美的插图,又有晦涩难懂的文言文。传统的研究方法需要你:先找…...
Phi-4-mini-reasoning代码审查助手:集成到IDE的智能提示插件
Phi-4-mini-reasoning代码审查助手:集成到IDE的智能提示插件 1. 智能代码审查的新时代 想象一下,当你正在IntelliJ IDEA中编写代码时,右侧边栏突然弹出一条提示:"这段循环可以改用Stream API简化,点击查看示例&…...
通过EVE-NG模拟器快速搭建山石防火墙Web管理环境
1. 为什么选择EVE-NG搭建山石防火墙实验环境 对于网络工程师和安全运维人员来说,经常需要在实验环境中测试防火墙配置。传统方式需要购买物理设备,不仅成本高,而且部署周期长。EVE-NG模拟器的出现完美解决了这个问题,它就像是一个…...
【动力心法】别把 PWM 当成魔法!撕碎理想执行器的线性幻觉,论“静摩擦”与“前馈补偿”的绝对镇压
摘要:在纯粹的数学世界里,只要有输入,就必然有输出。但在由钢铁、齿轮、密封圈和润滑油构成的物理世界中,能量必须先缴纳极其昂贵的“过路费”。无数软件开发者迷信于 PID 的数学反馈,天真地以为微小的误差能换来微小的…...
Vite代理配置实战:如何通过响应头追踪真实接口地址
1. 为什么需要追踪Vite代理的真实接口地址 前端开发过程中,使用Vite的代理功能解决跨域问题已经成为标配。但实际调试时经常会遇到这样的困扰:浏览器Network面板里看到的请求地址全是http://localhost:5173/api/user这样的本地路径,根本不知道…...
