C#基础(2)枚举

news/2024/9/20 1:27:47/ 标签: c#, 服务器, 数据库

前言

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

希望你能从今天的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.ppmy.cn/news/1521287.html

相关文章

Ubuntu22.04版本左右,开机自动启动脚本

Ubuntu22.04版本左右,开机自动启动脚本 1. 新增/lib/systemd/system/rc-local.service中[Install]内容 vim /lib/systemd/system/rc-local.service 按 i 进入插入模式后,新增内容如下: [Install] WantedBymulti-user.target Aliasrc-local.…

Android终端如何快速接入GB28181平台实现实时音视频回传

技术背景 GB28181是由中国国家标准委员会发布的基于IP网络的安防视频监控标准。Android平台GB28181设备对接模块,主要涉及到视频监控领域,可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务&#xff0…

Prometheus(八):Prometheus监控elasticsearch及常用API

目录 1 Prometheus监控elasticsearch1.1 启动ES自带的监控模块暴露指标数据1.2 通过Prometheus的插件 Elasticsearch Exporter来获取指标数据1、简介2、安装3、Prometheus配置 2 Prometheus常用API2.1 查询2.2 删除2.3 注册服务 1 Prometheus监控elasticsearch 使用Prometheus…

AI在医学领域:基础模型和视觉-语言模型在计算病理学应用概述

近年来,人工智能(AI)基于方法在计算病理学(CPath)领域中的应用迅速增长,这主要得益于数字幻灯片扫描仪的广泛采用。因此,大规模的全幻灯片图像(Whole Slide Images, WSIs&#xff09…

盘点4款超好用的电脑数据恢复工具

如今我们的生活和工作越来越离不开电脑,因此电脑里面也储存了我们大量的数据:图片,文档,工作资料等。但是这些重要数据却会因为误删除、病毒攻击、系统崩溃等原因遭到丢失。所以数据恢复软件就变得十分的重要,今天&…

零基础转行学网络安全怎么样?

🤟 基于入门网络安全打造的:👉黑客&网络安全入门&进阶学习资源包 如果您对转行学习网络安全感兴趣,以下是一些分析和建议: 一、网络安全行业的前景 网络安全行业作为一个新兴且不断发展的领域,具…

天润融通解开售后维修的成本枷锁,提高维修服务效率

如今,企业客户服务在开展业务咨询和售后受理时,主要方式还是通过电话与在线方式进行。这种方式虽然方便,但是对于一些非常紧急的情况还是显得有些不够。 比如,虽然现在许多企业APP已经实现了一键咨询和一键报修,但当客…

基于JAVA+SpringBoot+Vue的大学校园回忆录系统

基于JAVASpringBootVue的大学校园回忆录系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 …

vscode +STM32 VS CODE EXTENSION

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

Nginx: TCP建立连接的优化和启用Fast Open功能

TCP 建立连接优化 在三次握手中,相关TCP的内核参数可优化这一过程 net.ipv4.tcp_syn_retries 6net.ipv4.tcp_synack_retries 5net.ipv4.tcp_syncookies 0net.ipv4.tcp_max_syn_backlognet.core.somaxconnnet.core.netdev_max_backlog 1 ) net.ipv4…

HTTP 之 消息结构(二十二)

HTTP(超文本传输协议)是一种用于传输超媒体文档的协议,它定义了客户端和服务器之间请求和响应的消息结构。HTTP消息由一系列标准头部字段、一个空行和可选的消息体组成。 客户端请求消息 请求消息包括以下格式:请求行(…

VR虚拟驾驶未来发展_vr自动驾驶汽车所带来的改变

在自动驾驶汽车的基础上,VR虚拟现实技术的应用也让自动驾驶汽车更加智能化,能够实现更高级的驾驶体验,今天这篇文章就和大家一起探讨一下 VR虚拟驾驶未来发展的趋势,以及虚拟现实自动驾驶汽车所带来的几个改变。 一、VR 虚拟驾驶未…

hadoop的sbin

路径:opt/homebrew/sbin Hadoop 的 sbin 目录下包含了一系列 shell 脚本,用于启动、停止和管理 Hadoop 的各个组件和服务。下面逐一解释这些脚本的作用: 启动和停止脚本 start-all.sh 用于启动所有的 Hadoop 守护进程,包括 Name…

Qt-高DPI显示器

与标准DPI显示器相比,高DPI显示器增加了像素密度。 像素密度以每英寸点数(DPI)或每英寸像素(PPI)来衡量,由显示像素的数量和它们的大小决定。因此,单独的像素数量不足以确定显示器是否属于高dpi类别。 4K显示器有固定的像素数(约8米)&#x…

【时时三省】(C语言基础)指针进阶 例题2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 第一个arr 数组名相当于首元素地址 因为他没有放到strlen内部 也没有取地址 strlen是找\0 找不到\0就不会停下来 所以它打印的就是随机值 第二个arr0 首元素地址加零还…

C++ 图形框架 Duilib

Duilib是一个开源的DirectUI界面库,遵循BSD协议,可以免费用于商业项目。它具有以下特点: 简约易扩展的设计:Duilib遵循简洁、清晰的设计理念,使得用户界面更加直观、易于使用。同时,它也提供了丰富的扩展接…

镭速传输助力汽车行业打造安全高效的大文件传输新纪元

在数字化浪潮的推动下,汽车行业正迈向智能化和互联互通的新阶段,这对数据传输和管理提出了更高标准。大文件的快速传输、长距离传输的效率、跨国数据的合规性与安全性、以及数据脱敏需求等,成为汽车企业数字化转型中必须面对的挑战。 传输效率…

达梦数据库-DM8 企业版安装指南

一、DM8 企业版简介 达梦数据库(DM8)是中国自主研发的一款高性能数据库管理系统,广泛应用于企业级应用场景。DM8 企业版具备高可用性、强一致性和高性能等特点,支持多种操作系统和硬件平台。本文将详细介绍如何在 Kylin 操作系统上安装达梦数据库 DM8 企业版。 二、安装前…

Linux系统使用Docker compose搭建开源文档系统Paperless-ngx

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统,并结合cpolar内网穿透工具解决本地部署…

过滤器Filter(JavaEE有三大组件: servlet filter linstener)

目录 1、概念 2、过滤器作用 3、编写过滤器 4 过滤器链和优先级 4.1 过滤器链 2 过滤器优先级 5、过滤器应用:全局编码加身份认证拦截器 1、概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术。 2、过滤器作用 执行顺序在Servl…