我的对象Item
具有几个可以组合的二进制状态
bool CanBeSold;
bool CanBeBought;
bool CanBeExchanged;
我需要将值的当前组合存储到一个变量中。原因
我需要将此值存储在数据库中。在C ++中,我将创建一个位掩码
一种状态占据一些位置。 .NET中的好习惯吗?
最佳答案
您可以使用带有Flags
属性的枚举:
[Flags]
enum MyStates {
CanBeSold = 1,
CanBeBought = 2,
CanBeExchanged = 4
}
由于枚举是下面的整数数据类型,因此可以按通常的方式将它们合并:
state = MyStates.CanBeSold | MyStates.CanBeExchanged
请注意,这仅在枚举值是2的幂时有效(如注释中指出的Doug Ferguson),因此它们可以轻松组合,并且在设置多个时不会重叠。
您还可以将值定义为多个其他值的组合:
CanBeSoldOrBought = CanBeSold | CanBeBought
要么
CanBeSoldOrBought = 3
然后也可以按预期工作。例如,对于文件权限,可以看到这种情况,其中ReadWrite通常是Read和Write位的组合。
是的,这是相当普遍的做法。框架本身也在多个地方使用它。
然后,检查特定位是否被设置的通常方法是
if ((state & MyStates.CanBeSold) != 0) { ... }