带标志和按位运算的枚举
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>
来表示此数据。
我有一个 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>
来表示此数据。