[英]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.