3

在研究错误的原因时,我遇到了这行代码:

Status |= (int)states.Reading;

什么是 C# 中的“|=”运算符?

“状态”是这样定义的:

public static int Status 

...带有访问器和修改器(或“getter”和“setter”),而“states”是这样定义的:

[Flags]
public  enum states
4

2 回答 2

10

它是此处定义的“按位逻辑或”运算符

x |= y相当于x = x | y

另外,如果您想了解有关“|”的更多信息 运营商本身,你可以在这里这样做

于 2013-06-28T15:54:35.183 回答
2

如果您在“枚举”成员之上指定了 [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# 中 |= 运算符的使用(在枚举器的上下文中)。

于 2013-06-28T16:04:43.510 回答