gpt4 book ai didi

c# - 更新和扩展枚举 C#

转载 作者:行者123 更新时间:2023-12-03 13:56:07 24 4
gpt4 key购买 nike

我正在尝试以下问题,但似乎无法弄清楚如何扩展枚举:
问题 :
网站上的每个帐户都有一组代表用户访问的访问标志。
更新并扩展枚举,使其包含三个新的访问标志:

  • 由 Submit 和 Modify 标志组成的 Writer 访问标志。
  • 由删除、发布和评论标志组成的编辑器访问标志。
  • 由 Writer 和 Editor 标志组成的所有者访问权限。

  • 例如,下面的代码应该打印“False”,因为 Writer 标志不包含 Delete 标志。 Console.WriteLine(Access.Writer.HasFlag(Access.Delete))
    using System;

    public class Account
    {
    [Flags]
    public enum Access
    {
    Delete,
    Publish,
    Submit,
    Comment,
    Modify
    }

    public static void Main(string[] args)
    {
    //Console.WriteLine(Access.Writer.HasFlag(Access.Delete)); //Should print: "False"
    }
    }

    最佳答案

    您可以通过为枚举的每个标志指定一个值来实现此目的,如果在二进制系统中表示,该值仅包含零和一个 1。

    [Flags]
    public enum Access
    {
    // Simple flags
    Delete = 1, // 00001
    Publish = 2, // 00010
    Submit = 4, // 00100
    Comment = 8, // 01000
    Modify = 16, // 10000

    // Combined flags
    Editor = 11, // 01011
    Writer = 20, // 10100
    Owner = 31 // 11111
    }
    这样,writer 将同时具有提交和修改标志,但没有删除标志。
    为什么这样做?
    HasFlag 方法基本上执行按位与运算。因此,当您检查 delete 是否在编辑器标志中时,它会这样做。只有当两个位都为 1 时,结果位也为 1,否则为 0。
    00001
    01011
    ----- &
    00001
    检查删除是否在写入器中:
    00001
    10100
    ----- &
    00000
    如果结果与您作为参数传递的标志相同,则意味着包含该标志!
    更字面意思
    您也可以将数字定义为二进制文字。这样就更容易一目了然地看到什么是什么。
    [Flags]
    public enum Access
    {
    // Simple flags
    Delete = 0b00001,
    Publish = 0b00010,
    Submit = 0b00100,
    Comment = 0b01000,
    Modify = 0b10000,

    // Combined flags
    Editor = Delete | Publish | Comment,
    Writer = Submit | Modify,
    Owner = Editor | Writer
    }
    或者,就像我喜欢写的那样
    [Flags]
    public enum Access
    {
    // Simple flags
    Delete = 1,
    Publish = 1 << 1,
    Submit = 1 << 2,
    Comment = 1 << 3,
    Modify = 1 << 4,

    // Combined flags
    Editor = Delete | Publish | Comment,
    Writer = Submit | Modify,
    Owner = Editor | Writer
    }

    关于c# - 更新和扩展枚举 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65727868/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com