将枚举值与位标志组合

2024-03-28

我有这样的场景,用户有其角色

普通用户
保管人
金融

托管人和财务都是超级用户

我如何检查是否角色 托管人 is a 超级用户

这是我的示例代码..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    public enum Role
    {
        NormalUser = 0,
        Custodian = 1,
        Finance = 2,
        SuperUser = Custodian | Finance,
        All = Custodian | Finance | NormalUser
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Normal: " + Convert.ToInt32(Role.NormalUser));            
            Console.WriteLine("Custodian: " + Convert.ToInt32(Role.Custodian));
            Console.WriteLine("Finance: " + Convert.ToInt32(Role.Finance));            
            Console.WriteLine("SuperUser: " + Convert.ToInt32(Role.SuperUser));
            Console.WriteLine("All: " + Convert.ToInt32(Role.All));

            Console.WriteLine();
            Console.WriteLine("Normal User is in All: {0}", Role.NormalUser == Role.All);
            Console.WriteLine("Normal User is not a SuperUser: {0}", Role.NormalUser != Role.SuperUser);
            Console.WriteLine("Normal User is not a Custodian: {0}", Role.NormalUser != Role.Custodian);

            Console.WriteLine();
            Console.WriteLine("Custodian is in All: {0}", Role.Custodian == Role.All);
            Console.WriteLine("Custodian is a SuperUser: {0}", Role.Custodian == Role.SuperUser);
            Console.WriteLine("Custodian is a NormalUser: {0}", Role.Custodian == Role.NormalUser);

            Console.WriteLine();
            Console.WriteLine("Finance is in All: {0}", Role.Finance == Role.All);
            Console.WriteLine("Finance is a SuperUser: {0}", Role.Finance == Role.SuperUser);
            Console.WriteLine("Finance is a NormalUser: {0}", Role.Finance == Role.NormalUser);

            Console.ReadLine();
        }
    }
}

如果我们运行它,这就是结果

Normal: 0
Custodian: 1
Finance: 2
SuperUser: 3
All: 3

Normal User is in All: False
Normal User is not a SuperUser: True
Normal User is not a Custodian: True

Custodian is in All: False
Custodian is a SuperUser: False
Custodian is a NormalUser: False

Finance is in All: False
Finance is a SuperUser: False
Finance is a NormalUser: False

我期待着

托管人在所有:真实


枚举HasFlag http://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx是你想要使用的

Console.WriteLine("Custodian is in All: {0}", Role.All.HasFlag(Role.Custodian));

只是注意到你的枚举应该像这样定义,其中 Flags 属性和值间隔为 2 的幂

[Flags]
public enum Role
{
    NormalUser = 1,
    Custodian = 2,
    Finance = 4,
    SuperUser = Custodian | Finance,
    All = Custodian | Finance | NormalUser
}

2 的幂用于标记枚举的原因是 2 的每个幂代表在二进制表示中设置的唯一位:

NormalUser = 1 = 00000001
Custodian  = 2 = 00000010
Finance    = 4 = 00000100
Other      = 8 = 00001000

由于枚举中的每个项目都有一个唯一的位集,因此允许通过设置各自的位来组合它们。

SuperUser  = 6 = 00000110 = Custodian + Finance
All        = 7 = 00000111 = NormalUser + Custodian + Finance
NormOther  = 9 = 00001001 = NormalUser + Other

请注意二进制形式中的每个 1 如何与上一节中为标志设置的位对齐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将枚举值与位标志组合 的相关文章

  • 具有可绑定属性的自定义视图未在 Xamarin.Forms SAP 上正确绑定

    我有一个复选框 应该触发按钮的 IsEnabled 事件 但不知何故 应该执行的命令永远不会正确绑定并因此执行 这是 CheckBox xaml cs 控件 中的可绑定属性 public static readonly BindablePr
  • 电话号码的正则表达式,不允许全零

    需要您的正则表达式帮助 我当前的正则表达式是 d 8 最小长度为 8 不允许包含字母 特殊字符和空格 我还想禁止全零 如 00000000 Thanks 该模式应该可以满足您的需求 0 d 8 The 0 部分是负前瞻 将阻止仅输入零 Ex
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • ASP.NET MVC3 TryValidateModel 验证整个模型集合,而不仅仅是单个实例

    我有一个需要模型列表的操作 我想同时验证每个模型与整个模型集合 我正在尝试使用 TryValidateModel 但似乎如果我的任何一个模型无效 那么所有模型都无效 我的表单显示 5 个 SurveyResponseModel 一个包含两个
  • 本机 KDE 查找 Qt 5 应用程序

    我在 Kubuntu 12 10 Linux 机器上安装了 Qt5 和 Qt4 并注意到以下内容 使用 Qt4 编译的程序具有原生 KDE 外观和感觉 我使用默认的 KDEOxygen主题 我的程序也是如此 注意带有标题的平滑渐变和聚焦小部
  • C#:有什么方法可以发现文件使用的字符集编码吗?

    有什么方法可以发现文件使用的字符集编码吗 可靠地做到这一点的唯一方法是寻找字节顺序标记 http en wikipedia org wiki Byte order mark在文本文件的开头 此 blob 更一般地表示所使用的字符编码的字节顺
  • 实现3d索贝尔算子

    我目前正在研究从包含体素的 MRI 数据量中去除不均匀性 我想在这些体积上应用索贝尔运算符来找到梯度 我熟悉二维索贝尔掩模和二维图像的邻域 索贝尔面具 1 2 1 0 0 0 1 2 1 1 0 1 2 0 2 1 0 1 x y 的邻域
  • Websocket 标头丢失

    我正在 Rails 3 2 13 中使用 faye gem 在开发过程中 我在 localhost 9292 上运行 faye 在 localhost 3000 上运行我的应用程序 我可以使用命令行中的curl 请求激活弹出窗口 但无法从应
  • 未找到 React 应用程序的 GitHub Pages 页面

    我正在尝试将我的单页网站发布到 github 页面 但遇到了问题 当我转到网站链接时 出现 404 错误并显示以下消息 找不到文件 此地址配置的站点不包含请求的文件 如果这是您的站点 请确保文件名大小写正确匹配 URL 对于根 URL 例如
  • 如何显示wordpress中的所有类别?

    我使用了这段代码 categories wp get post categories get the ID foreach categories as category echo div class col md 4 a href get
  • python topN 最大堆,使用 heapq 还是自己实现?

    python中有heapq 用于一般用途 我想记录topN 0 20 10e7 条记录 如果使用heapq 应该使用 将最大值转换为最小值 并记录底部的最小数量 以调用 heapq heappushpop 我应该使用 heapq 还是自行实
  • Recyclerview:监听padding点击事件

    我有一个水平的RecyclerView with leftPadding 48dp topPadding 24dp and clipToPadding false 它从左侧的空白空间开始 但是当用户滚动列表时 其项目将绘制在该 以前是空的
  • 在iOS AVPlayer中,addPeriodicTimeObserverForInterval似乎丢失了

    我正在尝试设置AVPlayer addPeriodicTimeObserverForInterval 有人用过这个成功吗 我正在使用 Xcode 8 1 Swift 3 接受的答案让人感觉您可以将返回值分配给局部变量并忽略它 但根据doc
  • getPass() 在 Eclipse 中回显密码

    嘿 大家刚刚开始涉足一点 Python 以帮助处理工作中的一些脚本 但我似乎被一个小问题所困扰 我使用 Eclipse 和 pydev 作为我的开发平台 并针对 python 2 7 3 进行开发 我只是想提示用户输入密码 使用 passw
  • MKMapView 显示错误保存的区域

    当我的 iPhone 应用程序关闭时 我将地图区域保存到用户默认值中 如下所示 MKCoordinateRegion region mapView region NSUserDefaults standardUserDefaults set
  • 一个 INSERT 多个 SELECT

    我已经读过this https stackoverflow com questions 20426967 adding two select statements into one insert into statement in post
  • 如何对齐标签和输入字段

    我希望我的输入字段 标题 直接呈现在单选按钮下方 但现在它离左侧太远了 我需要额外的div因为它是动态表单 但我想要网格视图 我怎样才能做到这一点
  • 通用设计与奇怪的重复模板模式混合在一起。 C++

    考虑这样的问题 我有一个Base类和三个派生类Base 例如 DerivedA DerivedB and DerivedC 每个派生类都有其独特的容器 因此DerivedA has std vector
  • 如何使用java获取由aws中的文件组成的文件夹大小

    假设我们有一个名为 bucket1 的桶 里面有一个 名为 新文件夹 的文件夹 新文件夹 内是文件新文件夹 a1 pdf gt 2mb新文件夹 a2 pdf gt 2mb新文件夹 新文件夹2 b pdf gt 3mb 当我们使用 amazo
  • androidx 中已弃用 OnActivityResult()

    OnActivityResult 在 androidx 中已弃用 我从下面的链接中参考了 https developer android com training basics intents result https developer
  • 将不同的行值作为列 Sql Server

    我有一个包含 3 列的临时表 如下所示 JobID JobType JobValue 12 HR Jesica 23 MANAGER Ravi 5 MANAGER Jacob 60 EMPLOYEE Kiruan 45 MANAGER Ab
  • 人脸检测中的 Haar Cascades 与 LBP Cascades [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在 OpenCV 开源计算机视觉库 中尝试人脸检测 发现可以使用 Haar 级联来检测人脸 因为 OpenCV 提供了多个人脸检测 然而
  • 将枚举值与位标志组合

    我有这样的场景 用户有其角色 普通用户保管人金融 托管人和财务都是超级用户 我如何检查是否角色 托管人 is a 超级用户 这是我的示例代码 using System using System Collections Generic usi