【问题标题】:C# flags vs sample enums [duplicate]C#标志与示例枚举[重复]
【发布时间】:2016-11-24 05:59:52
【问题描述】:

有什么区别

[Flags]
    public enum AnswerFlags
    {
    A = (1 << 2),
    B = (1 << 1),
    C = (1 << 0)
    }

  public enum AnswerFlags
        {
        A = 4,
        B = 2,
        C = 1
        }

为什么我应该使用位而不是整数?

【问题讨论】:

  • 这里的问题重复stackoverflow.com/a/8480/3856907
  • 位在使用硬件端口和寄存器时通常很有用。在某些情况下,当极其紧凑的表示比清晰的代码更重要时,它们也很有用。
  • 这个问题为你解答:stackoverflow.com/questions/8447/…
  • 这不是链接到的问题的副本。这是关于将值定义为移位表达式或文字的方式。
  • 另一种方式会更常见(从 1 开始,每个下一个值加倍)。至于差异,结果值将相同,但 1、2、3 等的级数看起来更自然,左移表达式更明确地表达位掩码。很明显,对于每个值,只有一位被设置,并且对于每个下一个值,该位都会向左移动一步。做错也更难,因为每次加 1 比加倍增长的十进制数更容易。我以前从未见过这种声明标志的方式,但我喜欢它,我会采用它。

标签: c# enums


【解决方案1】:

标志和经典枚举的核心区别在于 枚举只保存一个值:A 或 B 或 C 尽管 标志用于保存一组值:A 或 B 或 C 或 AB 或 AC 或 BC 或 ABC。

您可能想在这里阅读: MSDN

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多