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

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

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

相关文章

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升。以下是对其技术特色的深入解析: 本地化技术优化:FlowUs息流通过深入研究中文用户的操作习惯,实现了界面的本地化设…

【WRF安装第二期(Ubuntu)】搭建WRF编译所需系统-系统环境检验

WRF安装第二期:搭建WRF编译所需系统-系统环境检验 0 升级和安装基础环境1 系统环境检验(System Environment Tests)1.1 检验和安装基础包1.1.1 安装指令1.1.2 检验指令 1.2 WRF安装的目录结构1.2.1 WRF系统环境测试 1.3 测试编译器&#xff0…

Python文件加密库之cryptography使用详解

概要 在现代信息社会中,数据的安全性变得越来越重要。为了保护敏感信息,文件加密技术被广泛应用。Python的cryptography库提供了强大的加密功能,可以轻松实现文件加密和解密。本文将详细介绍如何使用cryptography库进行文件加密,包含具体的示例代码。 cryptography库简介 …

模型剪枝综述

目录 1 深度神经网络的稀疏性: 2 剪枝算法分类: 3 具体的剪枝方法包括: 4 剪枝算法流程: 5 几种常见的剪枝算法: 6 结构化剪枝和非结构化剪枝各有其优缺点: 7 剪枝算法对模型精度的影响 8 影响剪枝…

《集成电路应用》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《集成电路应用》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《集成电路应用》级别? 答:国家级。主管单位:中国电子信息产业集团有限公司 主…

【错误总结】Ubuntu系统中执行 sudo apt-get update报错

Ubuntu系统中执行 sudo apt-get update报错 命令行描述升级sudo报错并解决错误描述错误解决原因1:系统网络问题 原因2:设置清华源后/etc/apt/sources.list不匹配原因3:ubuntu自带的源/etc/apt/sources.list有问题 apt-get update成功log参考 …

电脑的录屏功能在哪?精准操作,电脑录屏方法大揭秘

电脑的录屏功能已成为数字时代创作和分享的重要工具。然而,对于许多人来说,要找到电脑上的录屏功能可能并不容易。究竟它们隐藏在哪里?如何启用这个功能呢?这些问题可能会让人感到困惑。 本文将带您一起探索电脑上的录屏功能所在…

ip地址会因为位置不同而改变吗

在数字化时代,IP地址作为互联网用户的“数字指纹”,扮演着至关重要的角色。它不仅是设备接入网络的唯一标识,还常常与用户的地理位置紧密相连。然而,随着移动互联网的普及和人们日常活动的多样化,一个有趣的现象逐渐显…

【漏洞复现】泛微E-Cology9 WorkPlanService 前台SQL注入漏洞(XVE-2024-18112)

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤,直接将其拼接进了SQL查询语句中,导致系统出…

Kafka的入门及简单使用

文章目录 前言一、Kafka 的基本架构?1. Producer(生产者)2. Broker(代理/服务器)3. Consumer(消费者)4. Consumer Group(消费者组)5. Topic(主题)…

openJdk21镜像打包制作

文章目录 一.目的:二.dockerfile 代码三.调试四.效果图五.声明 一.目的: 制作基于openjdk21的基础镜像,方便后续使用 内容: 1.使用的是Debian 11 slim 作为基础镜像(在此感谢no name大佬提醒我alpine做为基础镜像不稳…

TypeScript 与 JavaScript 的对比区别

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

保研408真题练习:2009年全国硕士研究生入学统一考试(单选篇1)

🧊🧊🧊单项选择题(共40道) 🧊数据结构(10道) 🥥1.打印机的缓冲区逻辑结构 栈:先进后出; 队列:先进先出。 缓冲区的作用是解决主机…

EasyExcel 初使用—— Java 实现多种写入 Excel 功能

前言 大家好,我是雪荷。之前有一篇博客(EasyExcel 初使用—— Java 实现读取 Excel 功能_java easyexcel.read-CSDN博客)介绍了 Java 如何读取 Excel 表格,那么此篇博客就和大家介绍下 Java 如何利用 EasyExcel 写入 Excel。 Ea…

基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代,微信作为社交媒体的巨头,为企业和个人提供了丰富的互动营销平台。其中,投票活动作为一种有效的用户参与和互动方式,被广泛应用于各种场景。为了满足这一需求,我们推出了一款基于PHPMySQL组…

【原创教程】电气电工主要做什么?(入门篇)

本系列文章主要介绍工业电气电工所涉及到的操作技能,器件原理,图纸识别,以及电气电工质量管理。掌握本系列的技能,将能够胜任电气自动化方面的电气电工工作。 电气电工,它是一个细分领域,是目前许多公司迫…

【Python系列】Python 中`eval()`函数的正确使用及其风险分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2024服贸会媒体邀约资源表-附媒体名单

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 2024年服贸会作为全球服务贸易领域的重要盛会,将再次聚焦全球目光。计划于2024年举行的服贸会将继续发挥其作为国际服务贸易桥梁的作用,不仅是展示中国服务贸易成…

激光传感器 - 从零开始认识各种传感器【第二十一期】

激光传感器|从零开始认识各种传感器 1、什么是激光传感器 激光传感器是一种利用激光技术来进行测量和检测的设备。这类传感器使用激光光束来探测目标物体的位置、距离、速度或其他特性。激光传感器具有精度高、测量距离长,抗干扰能力强的特点。 2、激光传感器是如何…

Linux下杀死进程和线程的方法

文章目录 1. 背景介绍2. 命令介绍2.1 kill 命令2.2 pkill 命令2.3 top 或 htop 命令2.4 ps 命令 3. 使用方法3.1 杀死指定PID的进程3.2 杀死指定用户的所有进程3.3 杀死所有特定名称的进程3.4 使用 top 或 htop 杀死进程 4. 代码示例5. 总结 1. 背景介绍 在Linux操作系统中&am…