在研究错误的原因时,我遇到了这行代码:
Status |= (int)states.Reading;
什么是 C# 中的“|=”运算符?
“状态”是这样定义的:
public static int Status
...带有访问器和修改器(或“getter”和“setter”),而“states”是这样定义的:
[Flags]
public enum states
在研究错误的原因时,我遇到了这行代码:
Status |= (int)states.Reading;
什么是 C# 中的“|=”运算符?
“状态”是这样定义的:
public static int Status
...带有访问器和修改器(或“getter”和“setter”),而“states”是这样定义的:
[Flags]
public enum states
如果您在“枚举”成员之上指定了 [Flags] 属性,则使用枚举器时,这使用户可以一次选择多个枚举器。我的意思是:-
如果这是您的枚举器:-
[Serializable, DataContract(Namespace = "Company.Domain.LOB.Handler")]
[Flags]
public enum BankItemStatus
{
[EnumMember]
UnBatched,
[EnumMember]
Batched,
[EnumMember]
Sent,
[EnumMember]
ReplyReceived,
[EnumMember]
Closed
}
现在,如果您像这样使用枚举:-
BankItemStatus bankItemStatus = BankItemStatus.UnBatched;
BankItemStatus bankItemStatus = BankItemStatus.Sent;
bankItemStatus 保留的最终值是 BankItemStatus.Sent。你可以像这样检查它: -
if(bankItemStatus.UnBatched==BankItemStatus.UnBatched) //FALSE
if(bankItemStatus.Sent==BankItemStatus.Sent) //TRUE
现在,如果你这样做: -
BankItemStatus bankItemStatus = BankItemStatus.UnBatched;
bankItemStatus |= bankItemStatus.Sent
您将看到 bankItemStatus 现在具有两个枚举成员。你可以像这样检查它: -
if(bankItemStatus.UnBatched==BankItemStatus.UnBatched) //TRUE
if(bankItemStatus.Sent==BankItemStatus.Sent) //TRUE
希望这有助于理解 C# 中 |= 运算符的使用(在枚举器的上下文中)。