gpt4 book ai didi

c# - 测试多个标志值

转载 作者:行者123 更新时间:2023-11-30 19:14:46 24 4
gpt4 key购买 nike

我有这个标志枚举:

public enum AssignmentType
{
None = 0,
Attendant = 1,
ConductorCBS = 2,
ReaderCBS = 4,
Chairman = 8,
Mike = 16,
PlatformAttendant = 32,
Prayer = 64,
OCLM = 128,
Sound = 256,
Student = 512,
Custom = 1024,
Demonstration = 2048,
Assistant = 4096
}

我现在想针对某个标志条件测试我的变量。

我想确定我的变量只是的任意组合:

  • 学生
  • 助理
  • 演示

因此,如果它具有任何其他枚举值,则该变量将不满足测试。

起初我是这样开始的:

bool bIsPersonnel = true;

if (_Assignments == AssignmentType.None ||
_Assignments == AssignmentType.Demonstration ||
_Assignments == AssignmentType.Student ||
_Assignments == AssignmentType.Assistant ||
_Assignments == (AssignmentType.Demonstration | AssignmentType.Student))
{
bIsPersonnel = false;
}

但我很快意识到有多种选择。

有没有更简单的方法?

我看不出建议的答案有什么帮助。我想反向进行测试是最简单的。只要测试它是否有任何其他标志,我就知道它是人员!

最佳答案

您可以使用 ~ 按位否定运算符应用掩码来查找所有无效 标志,并检查是否已应用任何标志。

var valid = AssignmentType.Student | AssignmentType.Assistant | AssignmentType.Demonstration;
var invalid = ~valid; // Everything that isn't valid

if ((_Assignments & invalid) != 0)
{
// There was at least one invalid flag, handle it appropriately
}

或者检查它是否有效:

if ((_Assignment & invalid) == 0)
{
// There are no invalid flags, handle it appropriately
}

或者如果你只是在设置一个 bool 标志之后,你根本不需要 if 语句:

bool isPersonnel = ((assignment & invalid) != 0);

关于c# - 测试多个标志值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55439200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com