【问题标题】:Enum class square brackets枚举类方括号
【发布时间】:2016-09-16 03:58:20
【问题描述】:

为什么有些值在方括号中,1的含义是什么

public enum PrivilegeFlags : int
{
    None = 0,
    [EnumMember(Value = "Agent")]
    Agent = 1 << 0,
    [EnumMember(Value = "Campaign")]
    Campaign = 1 << 1,
   [EnumMember(Value = "BlackList")]
    BlackList= 1 << 2,
All = (1 << 3) - 1
}

谢谢。

【问题讨论】:

标签: c# enums


【解决方案1】:

方括号表示它是attribute,在这种情况下特别是EnumMemberAttribute。另外,<< 表示左移。

【讨论】:

    【解决方案2】:

    Enum 似乎是用来创建标志的。把枚举值翻译成二进制可以看得更清楚:

    public enum PrivilegeFlags : int
    {
        None = 0, //0000 0000
        [EnumMember(Value = "Agent")]
        Agent = 1 << 0, //0000 0001
        [EnumMember(Value = "Campaign")]
        Campaign = 1 << 1, //0000 0010
        [EnumMember(Value = "BlackList")]
        BlackList= 1 << 2, //0000 0100
        All = (1 << 3) - 1 //0000 0111
    }
    

    EnumMember 是分配给PrivilegeFlags enum 成员的属性。

    你不需要声明enum如下所示是等效的枚举:

    public enum PrivilegeFlags : int
    {
        None = 0, //0000 0000
        [EnumMember(Value = "Agent")]
        Agent = 1, //0000 0001
        [EnumMember(Value = "Campaign")]
        Campaign = 2, //0000 0010
        [EnumMember(Value = "BlackList")]
        BlackList= 4, //0000 0100
        All = 7 //0000 0111
    }
    

    1 &lt;&lt; 1 表示您的值为1,并且您将1 的二进制左移到1 的值。在二进制层面上看得很清楚:

    0000 0001 //1 in binary
    --------- << 1 shift left by 1
    0000 0010 //note the binary shift, now this is actually 2
    

    使用指定的左移&lt;&lt; 的好处是使标志创建具有递增编号:0, 1, 2, 3, 4, ... 等,而不是具有2^n0 模式中的编号:0, 1, 2, 4, 8, ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多