繁体   English   中英

可以在Flags枚举中添加“All”项吗?

[英]Is it ok to add an “All” item to a Flags enum?

如果我有一个可以同时出现的多个值的枚举,我创建一个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

当存在大量值并且将它们全部传递时,这将节省一些空间和时间是常见的情况。

据我所知,标志枚举(=位域)的机制,这应该工作。 我不知道有任何副作用或其他原因你不应该这样做吗?

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

All = A | B | C | D

这里有一个危险的问题,如果你改变了All,但是没有重新编译调用组件,他们将发送旧的All。 如果这对你来说没问题,那就好了吧。

使用按位运算更容易阅读

[Flags]
public enum MyEnum
{
    None   = 0,
    First  = 1 << 0,
    Second = 1 << 1,
    Third  = 1 << 2,
    Fourth = 1 << 3,
    All = ~(-1 << 4)
}

最容易出错的地方是

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

我们的螺旋桨头往往是微型聚焦,增加了E工作。 哦,亲爱的,该死的....

然后你将All的想法更进一步,感觉需要AllbutC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM