C#:枚举及位标志周边知识详解(小白入门)
文章目录
- 枚举
- 为什么要有枚举?
- 枚举的性质
- 设置默认类型和显式设置成员的值
- 位标志(重要)
- 位标记是什么及作用
- 位标志周边知识
- HasFlag判断是否有该功能
- 枚举前面加Flags的好处
- 关于枚举的更多知识
- using static简化代码
- 获取枚举成员的字面量
枚举
为什么要有枚举?
为了增加代码的可读性以及可维护性,增加了枚举这一种值类型(直接在栈上存储数据).
如在红黑树中给节点赋初始值,直接赋值0/1可读性太差.
枚举一个Color类型,RED在代表红色节点的同时又表示0,大大增加代码的可读性.
enum Color {RED,BLACK
}class Node {//...public Node(int key) {Key = key;NodeColor = Color.RED; // 默认新插入的节点是红色}
}
枚举的性质
enum TrafficLight {RED, //值为0YELLOW,GREEN
}
1.每个成员之间以逗号分隔,
2.每个成员默认表示的值从0开始.后面的值比前面的值大1
3.每个成员的默认类型是int
4.成员的名字不能重复
namespace shh
{enum TrafficLight{GREEN,RED,YELLOW,}class Program{static void Main(string[] args){TrafficLight t1 = TrafficLight.RED;//创建变量t1,并用枚举成员RED初始化Console.WriteLine(t1);}}
}
默认情况下打印t1显示的是t1的字面值RED,而不是他的实际值1.
如果要得到他的实际值,用int强转就行.
设置默认类型和显式设置成员的值
修改默认类型,在枚举类型后面加冒号,然后设置新的默认类型.
enum TrafficLight:uint{GREEN,RED,YELLOW,}
显式设置值
namespace shh
{enum TrafficLight:uint{GREEN=100,RED,YELLOW,}class Program{static void Main(string[] args){TrafficLight t1 = TrafficLight.RED;Console.WriteLine((int)t1);}}
}
先设置GREEN的值为100,因为后面的值是前面的值+1,所以RED=101.
位标志(重要)
位标记是什么及作用
位标记:用数据的二进制位来表示功能的开/关
我用下面的文件操作来举例
Write表示对文件进行写操作,二进制 0001
Read表示对文件进行读操作,二进制 0010.
每个值都是2的幂,然后就可以把他们组合起来形成唯一的值.
ReadWrite是Read和Write的组合
[Flags]enum FileOperations{None=0x0, //0x是十六进制的意思Write=0x1,Read=0x2,Execute=0x8,ReadWrite = Read|Write}
位标志在文件权限管理中非常常见,可以通过单个整数来表示多种不同的权限.
FileOperations F1 = FileOperations.None;FileOperations F2 = FileOperations.ReadWrite;
既节省性能,又增强代码的可读性
位标志周边知识
HasFlag判断是否有该功能
class Program{static void Main(string[] args){FileOperations F1 = FileOperations.ReadWrite;bool Test = F1.HasFlag(FileOperations.Execute);if(Test == false){Console.WriteLine("Test can not Execute");}}}
变量F1没有执行权限.
另外一种判断方法:
static void Main(string[] args){FileOperations F1 = FileOperations.ReadWrite;bool Test = (F1 & FileOperations.Write)==FileOperations.Write;if(Test == true){Console.WriteLine("Test can Write");}}
计算过程:(二进制位)
F1:0011
FileOperations.Write:0001
按位与(&)之后:0001
枚举前面加Flags的好处
class Program{static void Main(string[] args){FileOperations F1 = FileOperations.ReadWrite| FileOperations.Execute;Console.WriteLine(F1.ToString());}}
没去Flags:
去掉Flags:
Tostring:与枚举的成员匹配,成功的话返回字符串名称
没有Flags,编译器直接拿11去找枚举成员里面是否有匹配的.没有找到,打印11.
Flags相当于一个信号,告诉编译器枚举成员之间是可以进行组合的,然后他就拿着11去对应两个分开的成员.
关于枚举的更多知识
using static简化代码
using System;
using System.Collections.Generic;
using static shh.TrafficLight;
namespace shh
{enum TrafficLight{GREEN=100,RED,YELLOW,}class Program{static void Main(string[] args){Console.WriteLine($"{(int)RED}");}}
}//输出:101
using static shh.TrafficLight;扩展TrafficLight这个静态类,使得在函数体内不需要用 类名.成员 来访问
简化:TrafficLight.RED ==> RED
从中我们也可以看出,枚举类型属于静态类型,所以我们不用创建变量也能使用.顺便说一下,我们的Main主函数也是静态的.
namespace shh
{enum TrafficLight{GREEN = 100,RED,YELLOW,}class Program{static void Main(string[] args){Console.WriteLine(TrafficLight.GREEN);}}}
获取枚举成员的字面量
GetNames方法:调用Enum类型的GetNames方法,传参(用typeof来获取枚举类型),最后foreach遍历取得枚举成员.
namespace shh
{enum TrafficLight{GREEN=100,RED,YELLOW,}class Program{static void Main(string[] args){foreach (var name in Enum.GetNames(typeof(TrafficLight))) Console.WriteLine(name);}}
}//输出
//GREEN
//RED
//YELLOW
相关文章:

C#:枚举及位标志周边知识详解(小白入门)
文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…...

这本vue3编译原理开源电子书,初中级前端竟然都能看懂
前言 众所周知vue提供了很多黑魔法,比如单文件组件(SFC)、指令、宏函数、css scoped等。这些都是vue提供的开箱即用的功能,大家平时用这些黑魔法的时候有没有疑惑过一些疑问呢。 我们每天写的vue代码一般都是写在*.vue文件中,但是浏览器却只…...
小白如何安装WNO(小波神经算子),需要安装python3.8,torch,ptwt,pywt等
下载项目 WNO在github上面的项目地址如下: https://github.com/csccm-iitd/WNO/tree/main 下载下来后,里面的数据集需要用matlab代码生成,也可以到里面提到的google云盘里面下载数据集 安装环境 然后需要安装环境 注意python版本一定要…...
Java HashMap 源码解读笔记(一)--xunznux
文章目录 HashMap介绍实现说明:源码解读静态常量和内部节点类 Node静态工具方法属性字段 Fields未完待续。。。 HashMap 本文主要是用于记录我在阅读Java1.8的 HashMap 源码所做的笔记。对于源码中的注释会进行翻译下来,并且会对其中部分源码进行注释。 这一篇文章…...

“等保测评下的数据加密与隐私保护“
在当今数字化时代,数据已成为企业最宝贵的资产之一。然而,数据泄露、隐私侵犯等事件频发,不仅给企业带来经济损失,更严重损害了公众信任。等保测评,作为国家信息安全等级保护制度的重要组成部分,对数据加密…...

Oat++ 后端实现跨域
这里记录在官方的例子中,加入跨域。Oat Example-CRUD 在官方的例子中,加入跨域。 Oat Example-CRUD 修改AppComponent.hpp文件中的代码,如下: #include "AppComponent.hpp"#include "controller/UserController…...
Three basic starting points to do AI
Computers have been based on memory/storage for so many years. Don’t try to come up with something else. For so many years, AI has been based on fixed precise rules or fuzzy matching rules. Don’t think about coming up with the third one by yourself. Vi…...

等保测评练习卷22
等级保护初级测评师试题22 姓名: 成绩: 一、判断题(10110分) 1. 在应用系统测试中,如果审计是一个独立的功能,那么应用系统应对审计进程进行保…...

Linux用户-普通用户
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…...

世界顶级思想家颜廷利:生命的升华,人类与动物的进化之道
世界顶级思想家颜廷利:生命的升华,人类与动物的进化之道 动物在于进化, 人类载于净化…(升命学说) 当代世界最著名的哲学家颜廷利教授指出,在探索生命奥秘的广阔旅程中,我们不禁惊叹于大自然…...

团队心脏:项目比赛中激发团队潜力的策略与技巧
团队心脏:项目比赛中激发团队潜力的策略与技巧 前言项目负责人的角色定位执行力的重要性提升个人执行力的策略团队协作的关键持续学习与创新应对挑战的态度总结与反思结语 前言 在项目管理的世界里,每一次比赛都是一场没有硝烟的战争。作为项目负责人&am…...

Qt安卓开发的一些概念
目录 1、Android 版本和 API 的对应关系? 2、ABI是什么 2.1、x86_64 2.2、x86 2.3、arm64-v8a 2.4、armeabi-v7a 3、不同架构的特点 3.1、32位 ARM 架构 (ARMv7) 3.2、64位 ARM 架构 (ARMv8-A) 3.3、32位 Intel 架构 (x86) 3.4、64位 Intel 架构 (x86-64…...

语音交互、AI问答,等你来体验!
功能背景 在实际大屏应用中,用户向大屏直接下达语音指令显的越来越便捷,其中体现的交互感也比通过动作指令来的更加强烈,给用户带来更高效的服务体验。目前EasyV平台开发的自定义事件交互已经很完善,组件之间可以进行触发联动。 …...

深度对比分析python和RPA,为什么会python了,还要用RPA?
我们需要先理解Python和RPA(Robotic Process Automation)的基本概念以及它们各自的特点和优势,才能真正理解在业务场景中,两者各自可能发挥的实际应用价值和潜在的商业化价值。 Python和RPA的定义及比较 1. Python: …...
el-table支持行拖动
<template><div ref"sortable-wrapper"><slot /></div> </template><script> import sortable from sortablejs;export default {props: {handle: { // 拖动元素type: String,default: },data: { // 列表数据type: Array,defaul…...
git拉取项目并切换到某个tag
从GitHub上拉取特定标签(tag)的项目可以通过以下步骤完成。标签通常用于标记项目中的特定版本或发布版本,因此通过拉取特定标签,你可以获取到项目在该版本下的完整代码和文件。 使用Git命令行工具 打开终端或命令行工具ÿ…...

数据结构之探索“堆”的奥秘
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 堆的概念 堆的创建 时间复杂度分析: 堆的插入与删除 优先级队列 PriorityQ…...

光影漫游者:高科技球形场馆开启沉浸式体验新时代—轻空间
轻空间(江苏)膜科技有限公司的自主品牌“QSPACE轻空间”推出的“光影漫游者”,是一款突破传统的创新球形场馆。这款产品自问世以来,以其独特的设计和卓越的功能迅速成为各类活动和展览的焦点。光影漫游者不仅以其时尚的外观吸引了…...
面试题007:static修饰符可以修饰什么,static的重要规则
在Java类中,可用static修饰属性、方法、代码块、内部类 。static关键字修饰的成员被称为静态成员。 被修饰后的成员具备以下特点: 随着类的加载而加载 优先于对象存在 修饰的成员,被所有对象所共享 访问权限允许时,可不创建对…...

EasyTwin的动画系统已经到了next level?快来一探究竟!
在实际的数字孪生项目场景建设中,水利项目中的洪水推演、工业领域的工程施工模拟、车间产线运转、机械装置和零件配置展示等项目场景,都对动画效果有很强的使用需求,这是对渲染软件和设计师能力的极大考验🆘。 别担心!…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...