2

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

[Flags]
enum Options
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    AllOptions = 15
}

所以,而不是说

Options foo = Options.Option1 | Options.Option2 | Options.Option3 |... ad nauseum

我只能说

Options foo = Options.AllOptions;

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

4

2 回答 2

6

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

好吧,你可以使用我的Unconstrained Melody项目:

Options allOptions = Flags.GetUsedBits<Options>();

(然后,您可以使用 Unconstrained Melody 进行各种其他操作。)

我个人会尽量避免硬编码“全部”值 - 添加新值并忘记更新“全部”值太容易了。

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

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

于 2012-11-06T19:27:33.050 回答
4

你可以这样做:

[Flags]
enum Options
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    AllOptions = Option1 | Option2 | Option3 | Option4
}

这种方法的字面意思是 Option1 和 Option2 以及 Option3 和 Option4。您可以将其用作:

Options.AllOptions;

或者

Options.Option1 | Options.Option2 | Options.Option3 | Option.Option4

以上两种情况最终都会得到相同的结果。

于 2012-11-06T19:27:10.883 回答