带标志和按位运算的枚举

Enum with flag and Bitwise operation

我有一个 senario,我正在为相同的对象使用以下枚举

[Flags]
enum State
{
    None = 0x00,
    Added = 0x01,
    Edited = 0x02,
    Commented = 0x04,
    Uncommented = 0x8,
    Reordered = 0x16
}

我想得到这样的结果

如果添加的结果将是

Added

if then Edited result will be

Added, Edited

如果那么重新排序将是

Added, Edited, Reordered

如果那么评论将是

Added, Edited, Reordered, Commented

如果取消注释将是

Added, Edited, Reordered, Commented , Uncommented

如果那么评论将是

Added, Edited, Reordered, Commented , Uncommented , Commented

等等。

请告知我是否可以使用任何 Bitwise 操作来做同样的事情。

您的两个要求使得无法为此目的使用按位标志枚举。

  • 无法表示设置位的顺序。
  • 无法表示一个位被设置了不止一次。

使用按位标志枚举时,所有这些操作都无法区分:

Added, Edited, Reordered
Added, Reordered, Edited
Added, Edited, Reordered, Edited

它们都表示为Added | Edited | Reordered

如评论中所述,您应该使用 List<State> 来表示此数据。