枚举的标志和非标志变体

Hei*_*nzi 4 c# enums coding-style

假设我需要在标志和非标志变体中都使用枚举.

  • 选项1:我可以复制一切:

    enum Color { Red, Blue, Green }
    
    [Flags]
    enum Colors {
        None = 0,
        Red = 1,
        Blue = 2,
        Green = 4
    }
    
    // use cases
    Color currentColor;
    Colors supportedColors;
    
    Run Code Online (Sandbox Code Playgroud)
  • 选项2:我可以将Flags变体用于所有内容:

    Colors currentColor; // ugly, since neither "None" nor "Red | Blue" should be valid
    
    Run Code Online (Sandbox Code Playgroud)

我不喜欢其中任何一个:在选项1中Color.Red,并且Colors.Red完全不相关,这可能需要绑定代码.另外,我必须保持两个枚举同步.选项2的缺点是显而易见的.我真正喜欢的是类似的东西

enum Colors = Flag set of Color;
Run Code Online (Sandbox Code Playgroud)

这个要求有更优雅的解决方案吗?

Mar*_*ell 5

我只是简单地将[Flags]版本用于所有内容,并且只需在几个地方确保它只是一个值.你要这样做,因为即使没有[Flags]以下是有效的:

var flags = (Color)47; // why not
Run Code Online (Sandbox Code Playgroud)

所以,你需要检查的Color是你期待.这[Flags]只会帮助序列化/解析.