C#重启 --- 枚举

news2025/4/17 9:09:13

第一部分 --- 枚举

枚举类型的本质其实就是在给整型数据加标签,当编译器遇到枚举类型标签的时候,编译器会自动获取标签对应的整型数据(默认从0开始由上往下递增)

枚举类型的使用方法:

1.枚举类型的类型名是由我们自己定义的,就在enum关键字后面

2.首先我们要通过枚举类型名创建一个枚举变量

3.然后我们可以枚举变量名 + 点操作符 + 枚举类型中有的标签名 的方方式来访问对应的标签

4.编译器在识别到枚举类型标签后就会自动将标签转换为它所对应的整型数据并访问

 (PS:枚举类型中每一个标签后面的等号可写可不写,不写的时候就会按照默认的顺序分别赋予对应的整型数据,如果写的话则我们可以自定义标签对应的整型数据,且这个标签后面的标签对应的整型数据也会跟着变动(以第一个变动德标签为起点,依次递增))

1.在开发过程中,出现选择的情况的话就可以使用枚举类型

2.赋值给枚举类型变量的值是 枚举类型变量 + 点操作符 + 枚举类型中的标签

接下来介绍如何在函数只有一个枚举类型参数的情况下,接收多个枚举类型中的标签

方法:在多个运算符之间使用按位或运算符(如上图)进行按位或运算

按位或运算:每一个二进制位一一对应输出结果,如果两个二进制位中有一个二进制位为1的话,则输出一个为1的二进制位,否则输出0

比如0000000000 和 0000000001 通过按位或运算符进行计算得出的结果就是 0000000001

在使用这个方法前,我们必须达成几个前提条件!

 满足条件1的方法需要我们按照一定规律给每一个标签定义一个整型数据,这个规律是

第一个标签对应2的0次方,第二个标签对应2的1次方,第三个则是2的2次方,第四个,第五个依此类推

在一个枚举类型的头顶上用 [Flags]  j进行修饰,给这个枚举类型打上标记,让计算机和程序员知道这个枚举类型可以进行标签多选 

要注意的是,当第一个条件满足的时候,这个枚举类型就可以进行标签多选了,之所以会有第二个条件是为了增强代码的可读性

那么问题又来了,当一个枚举变量接收了多个枚举标签后,我们该怎么判断它是否接收了指定标签呢?

答案是使用按位与运算符来进行计算和判断

将接收了多个标签的枚举类型参数与特定的枚举标签a进行按位与运算,如果运算结果等于枚举类型标签a的话,则这个枚举类型参数接收的标签中包含这个枚举标签 a

(注意!!! &&,|| 两个按位与符号或者是两个按位或符号组合起来的是逻辑判断符而不是按位与 / 按位或运算符,它们的作用是进行逻辑判断而不是进行按位运算,如果要按位运算的话,,就用单个按位与& 或者是 按位或 | 符号,符号的两侧分别是参与运算的数据)

在使用按位与运算符的时候要注意运算符的优先性,比如上面这个例子

我们原本的想法是先进行style 和 PersonStyle.tall的按位与运算,然后将计算结与 PersonStyle.tall进行是否相等的逻辑判断

但是!由于运算符的优先性规定,实际上先执行的是逻辑运算符 == ,然后再执行 按位与运算符,而按位与运算符无法对bool类型的数据进行计算,所以上面这个例子会报错

解决方法就是将我们想要先执行的命令用括号括住

 我们也可以使用另一种方式来判断是否包含

根据前面的前置条件我们可以推出,如果包含的话,按位与的结果一定不为0,一旦为0就是不包含

我们可以通过强制类型装换将整型转换为对应的标签(前提是有标签和它对应),也可以将标签转换为对应的整型

(我们定义的枚举类型名)整型变量 ---->  整型转换为对应的标签

(int)标签 ---> 将标签转换为整数

调出标签的方法:我们定义的枚举类型名 + 点操作符 + 标签名

通过枚举类型创建的枚举类型变量可以接收我们调出来的枚举类型标签,一般来说一个枚举类型变量一次只能够接收一个标签,但是!  在我们对枚举类型进行处理后,使其符合可以接收多个标签的条件时,我们就能让一个枚举类型变量接收多个标签了

上图这个是在将字符串类型转换为枚举类型(如果有的话)

熟悉通过Enum基类调用Parse方法,第一个参数后面会讲,第二个参数就是我们要转换的字符串

传唤成功后就会返回一个object类型的数据,我们不能将这个数据直接传给枚举类型变量(父类可以接收子类数据,子类不可以接收父类数据

所以我们还需要进行强制类型转换,将object类型的数据转换为对应的枚举类型

枚举类型转换为字符串 ---> 调出的标签 + 点操作符 + Tostring方法 将标签转换为字符串形式 

Enum ---》 枚举关键字

 

  

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

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

相关文章

四.STM32F030C8T6 MCU开发之利用 TIM1+ADC1+DMA1 实现5路(3路外部电压模拟信号+内部2路信号)采集

四.STM32F030C8T6 MCU开发之利用 TIM1ADC1DMA1 实现5路(3路外部电压模拟信号内部2路信号)采集 文章目录四.STM32F030C8T6 MCU开发之利用 TIM1ADC1DMA1 实现5路(3路外部电压模拟信号内部2路信号)采集0.总体功能概述ADC 简介1.ADC硬…

数据结构《LinkeList 双向链表》

LinkeList LinkeList 的低层是由双向链表结构组成的,所有元素都是存放到单独的节点当中,通过地址引用将节点串联起来 因此在任意位置插入或删除元素时,都不在需要移动元素,效率较高 下面是双向链表的结构图: 在集合框…

【从零开始游戏开发】静态资源优化 | 全面总结 |建议收藏

你知道的越多,你不知道的越多 🇨🇳🇨🇳🇨🇳 点赞再看,养成习惯,别忘了一键三连哦 👍👍👍 文章持续更新中 📝📝…

C++智能指针

文章目录一、智能指针的目的和基本原理二、不带引用计数的智能指针2.1 auto_ptr2.2 scoped_ptr2.3 unique_ptr三、带引用计数的智能指针3.1 shared_ptr3.2 weak_ptr一、智能指针的目的和基本原理 一般new出来的对象会用普通指针引用,此时申请的堆上的资源需要我们手…

乐趣国学—品读《弟子规》中的“泛爱众”之道(上篇)

前言 “泛爱众”就是以广泛的爱心对待社会大众。人类生活是以爱心为纽带,没有爱心,人类生活就太痛苦不堪了。这个爱心从哪里来的?这个爱心就是孝心。孝道,正是培养爱心的第一步,一个连父母都不爱的人决不会真心爱他人&…

19.Feign 的工程化实例:eureka,ribbon,feign,hystrix(springcloud)

项目模型 项目结构 本实例创建model都是通过maven手动创建,依赖进行手动导入,好处是比使用springboot模板创建更加灵活,更方便的进行父子模块的管理。 1.创建父项目feign-project 2.对父项目feign-project的pom.xml,进行手动导入依…

Linux基础内容(10)—— 进程概念

目录 1.冯诺依曼体系结构 ​编辑1.冯诺依曼体系特点 2.cpu运算原理 3.数据传输 2.操作系统 1.操作系统管理的真相 2.操作系统与硬件的交互方式 3.操作系统与用户的交互方式 1.系统调用接口 2.用户对系统调用的使用 3.进程 1.进程的概念 2.Linux中的进程 3.与进程…

基于DJYOS的SPI驱动编写指导手册

1.贡献者列表 深圳市秦简计算机系统有限公司DJYOS驱动开发团队。 2.概述 DJYOS的DjyBus总线模型为IIC、SPI之类的器件提供统一的访问接口,SPIBUS模块是DjyBus模块的一个子模块,为SPI器件提供统一的编程接口,实现通信协议层与器件层的分离。…

Python 考试练习题 2

一、选择题 1、下列是 python 合法标识符的是( B)。 A. 2variable B. variable2 C. $anothervar D. if 2、在 python 中字符串的表示方式是(D )。 A.采用单引号包裹 B.采用双引号包裹 C.采用三重单引号包裹 D.ABC 都是 3、设有…

【浅学Linux】动态库与静态库的封装与使用

朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的? 文章目录一:动态库与静态库的理解二:静态库2.1:静态库的使用2.2&…

Sprite Editor

1、SpriteEditor SpriteEditor是精灵图片编辑器 它主要用于编辑2D游戏开发中使用的Sprite精灵图片 它可以用于编辑 图集中提取元素,设置精灵边框,设置九宫格,设置轴心(中心)点等等功能 2、Single图片编辑 Sprite Ed…

Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络Docker原生网络bridgeHostnoneDocker自定义网络自定义bridgeoverlaymacviandocker network所有基本命令Docker容器通信双冗余机制跨主机容器网络一些遗留错误解决错误1错误2错误3错误4Docker原生网络 docker安装时…

如何搭建node_exporter

如何搭建node_exporter 1.观看条件 1.假设你已经看过上一篇文章 《如何搭建普罗米修斯 Prometheus》 2.假设你已经会搭建普罗米修斯(promethus) 3.上面两个假设,只要满足一个。那你看这篇文章就没什么压力了 2.node_exporter是啥 node_…

UI自动化测试之selenium工具(浏览器窗口的切换)

目录 前言 方法 实例 ①示例1 ②示例2 附加知识 结语 前言 1、在浏览网页的时候,有时点击一个链接或者按钮,会弹出一个新的窗口。这类窗口也被称之为句柄(一个浏览器窗口的唯一标识符,通过句柄实现不同浏览器窗口之间的切…

C++Qt开发——文件操作

简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同。IO操作的本质是连续存储空间的数据读写。 1. IO设备的类型 顺序存取设备:只能从头开始顺序读写数据&#…

python游戏库pygame经典教程

目录 一.Pygame程序基本搭建过程 1.初始化化程序 2.创建Surface对象 3.事件监听 4.游戏循环 二.Pygame Display显示模块详解 1.将Surface对象粘贴至主窗口上 2.设置窗口主窗口 3.填充主窗口背景,参数值RGB 4.设置窗口标题 5.更新屏幕内容 6.pygame.display其他方…

C# VS2022 EF6 + Mysql8.0.31 CodeFirsts使用配置

文章目录环境安装Mysql8.0.31下载Mysql连接器Net版本安装VS2022创建工程添加Nuget包修改配置文件如下准备工作,创建一个Dbcontext类,代码如下打开程序包控制台输入命令第一步第二步第三步第四步简要介绍一下如何添加一个表思路添加User实体类修改dbconte…

NodeMcu arduino ESP8266 搭建mqtt服务(然也物联)以及使用

NodeMcu arduino ESP8266 搭建mqtt服务以及使用 本文章学习借鉴于太极创客团队,以表感谢。官网http://www.taichi-maker.com/ 操作步骤:我们注册然也物联平台,申请社区版本,进行测试。 文章目录NodeMcu arduino ESP8266 搭建mqtt…

【Python基础篇021】黏包现象丨udp的socket服务

🌠前言 基于udp的socket服务有什么特点?黏包现象是什么?又是如何产生的?udp和tcp哪种会有黏包现象?看完这篇文章相信你会有所收获。 目录 🌠一、基于udp的socket服务 🌠二、TCP中的黏包现象 …

保边滤波之引导滤波与领域转换滤波

(1)引导滤波 局部窗口内输出图像O和引导图像G成线性关系OiakGibk, ∀i∈Ωk 假设输出图像O和输入图像I之间的关系为OiIi−ni,噪声最小即最小化ni,即 每个像素点i包含于多个窗口Ωk,每个窗口都会得到一个a、b值&#…