C# AND 赋值运算符 (&=) 与按位枚举

标签 c# enums bitwise-operators

我正在使用按位枚举从函数返回值

[Flags]
private enum PatientRecord { NoRecord=0x0, SameEnrollmentDate=0x1, SameScreeningDate=0x2 }

并且有一个函数

var returnVar = PatientRecord.NoRecord;
....
if (condition...)
{
   returnVar &= PatientRecord.SameEnrollmentDate;
}
return returnVar

调试器显示 returnVar 在 AND assignment operator 前后具有相同的值已执行(即 PatientRecord.NoRecord (0) 或 PatientRecord.SameScreeningDate (2))。

为什么会这样,是否有比以下更简洁的解决方案:

returnVar = returnVar & PatientRecord.SameEnrollmentDate;

谢谢。

最佳答案

您需要按位或 (|) 而不是按位与 (&):

var returnVar = PatientRecord.NoRecord;
....
if (condition...)
{
   returnVar |= PatientRecord.SameEnrollmentDate;
   //        ^ Bitwise OR assignment
}

与零 (NoRecord=0x0) 的“与”将始终得到零。

关于C# AND 赋值运算符 (&=) 与按位枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006729/

相关文章:

c# - Specflow 覆盖原始异常堆栈跟踪

java - 方法 枚举 isBigger()

c++ - C++ 中的多数函数使用 3 uint8_t

math - 一些运营商之间的区别 "|"、 "^"、 "&"、 "&^"。戈朗

C 在减法期间检查溢出

c# - 如何从 Windows 窗体应用程序的 DataGrid 中的选定行获取值?

c# - 使用 C# 在 Windows 窗体中查看 PDF

c# - 发布者/订阅者的使用陷入​​有状态状态

python - 枚举类成员显示为已定义类型而不是枚举成员

C++ 在 switch 语句中使用特定的类和枚举范围