当前位置: 首页 > news >正文

笔记:Enum中FlagsAttribute特性的用法

一、目的:分享Enum中FlagsAttribute特性的用法

        在C#中,Enum(枚举)类型可以使用[Flags]属性来表示一个枚举可以存储多个值。这是通过按位运算符(如|(或)和&(与))来实现的。使用[Flags]属性的枚举通常用于表示一组开关或状态的组合。

        在C#中使用[Flags]属性定义枚举时,遵循一些规则和最佳实践可以帮助确保你的枚举正确地表示复合值。这些规则包括:
1.    使用二进制位表示值:每个枚举值应该是2的幂(即,1, 2, 4, 8, 16等),这样可以通过按位运算(如按位与&、按位或|)组合和解析这些值。
2.    为组合值提供命名常量:如果你的枚举中有常用的值组合,可以为这些组合提供命名常量,以提高代码的可读性。
3.    包括一个表示“无”状态的值:通常,值为0的枚举成员用于表示“无”或“空”状态,这是一个好习惯。
4.    使用[Flags]属性:在枚举定义之前添加[Flags]属性,以明确表示该枚举用于位字段(即,可以存储多个值的枚举)。
5.    为枚举类型选择合适的底层类型:默认情况下,枚举的底层类型是int。如果你的枚举不需要int那么大的范围,可以选择一个更小的底层类型(如byte)来节省空间。


二、实现

如何定义

[Flags]
public enum FileAccess
{None = 0,    // 表示无权限Read = 1,    // 2^0, 单个权限Write = 2,   // 2^1, 单个权限Execute = 4, // 2^2, 单个权限ReadWrite = Read | Write, // 组合权限All = Read | Write | Execute // 所有权限
}

        FileAccess枚举使用[Flags]属性,表示可以组合多个值。ReadWrite和All是使用按位或运算符组合其他值的示例。FileAccess枚举使用[Flags]属性,表示可以组合多个值。ReadWrite和All是使用按位或运算符组合其他值的示例。

注意定义

如何使用

        FileAccess access = FileAccess.Read | FileAccess.Write;Console.WriteLine(access); // 输出: Read, WriteConsole.WriteLine(access.HasFlag(FileAccess.Read)); // 输出: TrueConsole.WriteLine(access.HasFlag(FileAccess.Execute)); // 输出: False

使用HasFlag方法检查特定的标志是否被设置

如何移除枚举标志中的特定值

        FileAccess access = FileAccess.ReadWrite | FileAccess.Execute;Console.WriteLine("Original access: " + access); // 输出: Read, Write, Execute// 移除Write权限access &= ~FileAccess.Write;Console.WriteLine("After removing Write: " + access); // 输出: Read, Execute

        access最初被设置为ReadWrite | Execute,这意味着它包含Read、Write和Execute权限。然后,使用access &= ~FileAccess.Write;语句移除Write权限。这里,~FileAccess.Write计算出Write的按位取反值,然后&=操作确保只有Write以外的其他权限保留在access中 

如何检查枚举标志是否同时包含多个特定值 

FileAccess access = FileAccess.ReadWrite | FileAccess.Execute;// 检查是否同时具有Read和Write权限bool hasReadAndWrite = (access & FileAccess.ReadWrite) == FileAccess.ReadWrite;Console.WriteLine("Has Read and Write: " + hasReadAndWrite); // 输出: True// 检查是否同时具有Read和Execute权限bool hasReadAndExecute = (access & (FileAccess.Read | FileAccess.Execute)) == (FileAccess.Read | FileAccess.Execute);Console.WriteLine("Has Read and Execute: " + hasReadAndExecute); // 输出: True// 检查是否同时具有Write和Execute权限bool hasWriteAndExecute = (access & (FileAccess.Write | FileAccess.Execute)) == (FileAccess.Write | FileAccess.Execute);Console.WriteLine("Has Write and Execute: " + hasWriteAndExecute); // 输出: True

五、需要了解的知识点

System.FlagsAttribute 类 - .NET | Microsoft Learn

Enum.HasFlag(Enum) 方法 (System) | Microsoft Learn

位运算符和移位运算符 - 对整数类型中的单个位执行布尔(AND、NOT、OR、XOR)和移位运算 - C# reference | Microsoft Learn

System.Enum 类 - .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关文章:

笔记:Enum中FlagsAttribute特性的用法

一、目的:分享Enum中FlagsAttribute特性的用法 在C#中,Enum(枚举)类型可以使用[Flags]属性来表示一个枚举可以存储多个值。这是通过按位运算符(如|(或)和&(与)&#…...

QWidget如何切换ui

在Qt中,QWidget及其子类用于构建图形用户界面。如果你想要在不同的UI之间切换,可以使用QStackedWidget,它可以管理一组QWidget,并且每次只显示其中一个。 以下是一个简单的例子,展示如何使用QStackedWidget切换UI&…...

web网站组成

web网站由四部分组成:浏览器 前端服务器 后端服务器 数据库服务器 流程: 1.浏览器输入网站后,向前端服务器发送请求,前端服务器响应,静态的数据给浏览器。 2.前端代码中script中有url,这个是向后台发送请求的网…...

带您详细了解安全漏洞的产生和防护

什么是漏洞? 漏洞是 IT、网络、云、Web 或移动应用程序系统中的弱点或缺陷,可能使其容易受到成功的外部攻击。攻击者经常试图寻找网络安全中的各种类型的漏洞来组合和利用系统。 一些最常见的漏洞: 1.SQL注入 注入诸如 SQL 查询之类的小代…...

【接口测试】params传参与body传参区别

文章目录 一.params传参二.body传参三.两者区别说明 一.params传参 params传参一般用于get请求 params传参时,参数会附于URL后面以问号形式展示。 示例: http://ip地址:端口号/login?usernamexm&pwd111二.body传参 body传参一般用于post请求 body传参时需…...

【docker】部署证书过期监控系统mouday/domain-admin

证书过期了再去部署证书容易被骂,就找了一个开源的证书过期系统来部署一下 过程 官方文档:https://domain-admin.readthedocs.io/zh-cn/latest/manual/install.html#docker 直接下载镜像是超时的,切换一下文档推荐的镜像源 新建docker配置…...

高级java每日一道面试题-2024年7月17日

面试官: java中都有哪些引用类型? 我回答: 强引用(Strong Reference) 描述:这是最常见和最直观的引用类型,我们通常在代码中创建的对象引用就是强引用。例如,Object obj new Object();。只要强引用存在,…...

css中如何清除浮动

在CSS中,可以使用clear:both属性来清除浮动。以下是几种常见的清除浮动的方法: 使用clearfix类:在CSS中定义一个clearfix类,并将其应用于需要清除浮动的父元素上。 .clearfix::after {content: "";display: table;cle…...

【网络】tcp_socket

tcp_socket 一、tcp_server与udp_server一样的部分二、listen接口(监听)三、accept接收套接字1、为什么还要多一个套接字(明明已经有了个socket套接字文件了,为什么要多一个accept套接字文件?)2、底层拿到新…...

Live555源码阅读笔记:哈希表的实现

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

vue3创建vite项目

一、创建vue3 vite项目: 命令行创建:npm create vitelatest vue3-tdly-demo -- --template vue (1)先进入项目文件夹,cd vue3-tdly-demo (2)之后执行, npm install (3)最后运行,npm run dev 将main.js文件内容改成…...

Maven概述

目录 1.Maven简介 2.Maven开发环境搭建 2.1下载Maven服务器 2.2安装,配置Maven 1.配置本地仓库地址 2.配置阿里云镜像地址 2.3在idea中配置maven 2.4在idea中创建maven项目 3.pom.xml配置 1.项目基本信息 2.依赖信息 3.构建信息 4.Maven命令 5.打包Jav…...

Easyu中datagrid点击时获取所在行的数据

问题 双击单元格时,获取该行的记录内容 $(#list).datagrid({method: post,url: user/list,queryParams:{sex : "f",age : "18~25"},fitColumns: true,pageList: [ 5, 10, 15, 20 ],singleSelect: false,pagination: true,fit: true,rownumber…...

java项目中添加SDK项目作为依赖使用(无需上传Maven)

需求: 当需要多次调用某个函数或算法时,不想每次调用接口都自己编写,可以将该项目打包,以添加依赖的方式实现调用 适用于: 无需上线的项目,仅公司或团队内部使用的项目 操作步骤: 以下面这…...

区块链和数据要素融合的价值及应用

一、数据要素面临的关键障碍 在构建数据要素基石的过程中,首要任务是明确并解决产权架构的难题,特别是使用权的确立与流转机制的顺畅,此乃数字经济蓬勃发展的命脉所在。一个高效的数据流转体系对于激发数据潜能、加速经济发展及优化数据资源…...

以太坊的可扩展性危机:探索执行层的瓶颈

导读:以太坊执行层承担着交易处理、智能合约执行以及保持一致和安全状态的维护等工作。Fuel Labs 撰文解析了以太坊执行层的工作原理,及其在可扩展性方面的发展瓶颈和影响。 Fuel Labs: 执行是指在区块链上执行交易和执行状态更改所需的计算。此计算通常…...

静态解析activiti文本,不入库操作流程

说明&#xff1a; activiti本身状态存库&#xff0c;导致效率太低&#xff0c;把中间状态封装成一个载荷类&#xff0c;返回给上游&#xff0c;下次请求时给带着载荷类即可。 1.pom依赖 <dependency><groupId>net.sf.json-lib</groupId><artifactId>js…...

100个python的基本语法知识【上】

0. 变量和赋值&#xff1a; x 5 name “John” 1. 数据类型&#xff1a; 整数&#xff08;int&#xff09; 浮点数&#xff08;float&#xff09; 字符串&#xff08;str&#xff09; 布尔值&#xff08;bool&#xff09; 2. 注释&#xff1a; # 这是单行注释 ""…...

Python从0到100(四十四):读取数据库数据

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

ZLMRTCClient配置说明与用法(含示例)

webRTC播放视频 后面在项目中会用到通过推拉播放视频流的技术&#xff0c;所以最近预研了一下webRTC 首先需要引入封装好的webRTC客户端的js文件ZLMRTCClient.js 下面是地址需要的自行下载 http://my.zsyou.top/2024/ZLMRTCClient.js 配置说明 new ZLMRTCClient.Endpoint…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...