加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在一个变量中存储多个状态?

发布时间:2020-12-15 20:04:49 所属栏目:百科 来源:网络整理
导读:我的对象Item有几个可以组合的二进制状态 bool CanBeSold;bool CanBeBought;bool CanBeExchanged; 我需要将当前的值组合存储到一个变量中.原因 是我需要将此值存储在DB中.在C中我会创建一个位掩码 一个州占据一点点的地方.这是.NET中的好习惯吗? 解决方法
我的对象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) { ... }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读