4

如果我有一个可以同时存在多个值的枚举,我会创建一个 Flags 枚举:

[Flags]
public enum Foo
{
    None = 0,
    A = 1,
    B = 2,
    C = 4,
    D = 8
}

如果我现在想通过设置每个值的事实,我将不得不做这样的事情:

Bar bar = new Bar(Foo.A | Foo.B | Foo.C | Foo.D);

添加一个额外的元素All会被认为是不好的做法/有害/亵渎吗?

    All = 15

当有很多值并且将它们全部传递是一种常见情况时,这将节省一些空间和时间。

据我了解标志枚举(=位域)的机制,这应该有效。是否有我遗漏的任何副作用或其他原因您不应该这样做?

4

4 回答 4

8

你可以这样做。但也许你不应该使用值 15,但是

All = A | B | C | D
于 2012-05-29T21:31:16.240 回答
2

这里有一个危险的陷阱,如果您更改 All 但调用组件没有重新编译,它们将发送旧的 All。如果这对你来说很好,那就这样吧。

于 2012-05-29T21:31:41.947 回答
1

使用按位运算更容易阅读

[Flags]
public enum MyEnum
{
    None   = 0,
    First  = 1 << 0,
    Second = 1 << 1,
    Third  = 1 << 2,
    Fourth = 1 << 3,
    All = ~(-1 << 4)
}
于 2014-04-22T16:43:15.930 回答
0

这最有可能出错的地方是

[Flags]
public enum Foo
{
    None = 0,
    A = 1,
    B = 2,
    C = 4,
    D = 8
    E = 16
    All = 15
}

我们的螺旋桨头往往是微聚焦的,补充 E 工作完成。哎呀,天哪,该死的......

然后您将 All 的想法更进一步,并感到需要 AllbutC。

于 2012-05-29T21:49:14.247 回答