为flag-type枚举定义"catchall"是明智的吗?

Sid*_*and 2 c# enums

我有一个enum以下面的方式声明(但有更多的选项 - 约15左右),因为我想要一个简单的方法来定义所有选项,而不必明确列出它们.

[Flags]
enum Options
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    AllOptions = 15
}
Run Code Online (Sandbox Code Playgroud)

所以,而不是说

Options foo = Options.Option1 | Options.Option2 | Options.Option3 |... ad nauseum
Run Code Online (Sandbox Code Playgroud)

我可以说

Options foo = Options.AllOptions;
Run Code Online (Sandbox Code Playgroud)

这是明智的吗?或者是否有更好的方法可以为变量提供所有可用选项而无需明确列出它们?

Jon*_*eet 6

或者是否有更好的方法可以为变量提供所有可用选项而无需明确列出它们?

那么,你可以使用我的Unconstrained Melody项目:

Options allOptions = Flags.GetUsedBits<Options>();
Run Code Online (Sandbox Code Playgroud)

(然后你可以使用Unconstrained Melody进行各种其他操作.)

我个人试图避免硬编码"全部"值 - 添加新值并忘记更新"全部"值将非常容易.

(AllOptions在这种情况下我也会避免命名它- 它应该只是All,以避免冗余Options.AllOptions.)

如果你这样做,添加一个单元测试,以确保你做对了:)