带标志和按位运算的枚举

时间:2016-08-31 06:26:46

标签: c# enums flags

我有一个senario,我正在使用以下枚举:

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

我想得到像这样的结果

如果添加的结果将是

  

如果编辑后的结果将是

  

添加,已编辑

如果那么重新排序将是

  

添加,编辑,重新排序

如果那么评论将是

  

添加,编辑,重新排序,评论

如果那么取消注释

  

添加,编辑,重新排序,评论,取消注释

如果那么评论将是

  

添加,编辑,重新排序,评论,取消评论,评论

等等。

请使用任何Bitwise操作建议我是否也可以这样做。

1 个答案:

答案 0 :(得分:2)

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

  • 无法表示设置位的顺序。
  • 没有办法表示过多一次设置。

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

.directive('card', function() {
  return {
      restrict: 'E', // Element directive,
      templateUrl: 'scripts/directives/card.html',
      controller: 'cardController'
  }
})

它们都表示为Added, Edited, Reordered Added, Reordered, Edited Added, Edited, Reordered, Edited

正如评论中所提到的,您应该使用Added | Edited | Reordered来表示此数据。