我有这个标志枚举:
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
}
Run Code Online (Sandbox Code Playgroud)
我现在想测试我的变量是否有特定的标志条件。
我想确定我的变量只是以下各项的任意组合:
NoneStudentAssistantDemonstration因此,如果它具有任何其他枚举值,则该变量将无法满足测试要求。
首先,我从这里开始:
bool bIsPersonnel = true;
if (_Assignments == AssignmentType.None ||
_Assignments == AssignmentType.Demonstration ||
_Assignments == AssignmentType.Student ||
_Assignments == AssignmentType.Assistant ||
_Assignments == (AssignmentType.Demonstration | AssignmentType.Student))
{
bIsPersonnel = false;
}
Run Code Online (Sandbox Code Playgroud)
但是我很快意识到存在多种选择。
有没有更简单的方法?
我看不出建议的答案有什么帮助。我想反向进行测试是最容易的。只需测试它是否还有其他标志,那么我知道它是人员!
您可以使用~按位求反运算符应用掩码以查找所有无效标志,并检查是否已应用任何标志。
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
}
Run Code Online (Sandbox Code Playgroud)
或检查它是否有效:
if ((_Assignment & invalid) == 0)
{
// There are no invalid flags, handle it appropriately
}
Run Code Online (Sandbox Code Playgroud)
或者,如果只是在设置单个布尔标志之后,就根本不需要if声明:
bool isPersonnel = ((assignment & invalid) != 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |