我的对象Item有几个可以组合的二进制状态
bool CanBeSold; bool CanBeBought; bool CanBeExchanged;
我需要将当前的值组合存储到一个变量中.原因
是我需要将此值存储在DB中.在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通常是读和写位的组合.
是的,这是一种非常普遍的做法.框架本身也在几个地方使用它.
然后检查特定位的常用方法是
if ((state & MyStates.CanBeSold) != 0) { ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。