バグの原因を調査しているときに、次のコード行に出くわしました。
Status |= (int)states.Reading;
C#の「|=」演算子とは何ですか?
「ステータス」は次のように定義されます。
public static int Status
...アクセサーとミューテーター(または「ゲッター」と「セッター」)を使用し、「状態」は次のように定義されます。
[Flags]
public enum states
バグの原因を調査しているときに、次のコード行に出くわしました。
Status |= (int)states.Reading;
C#の「|=」演算子とは何ですか?
「ステータス」は次のように定義されます。
public static int Status
...アクセサーとミューテーター(または「ゲッター」と「セッター」)を使用し、「状態」は次のように定義されます。
[Flags]
public enum states
「enum」メンバーの上に [Flags] 属性を指定した場合に列挙子を使用すると、ユーザーは一度に複数の列挙子を選択できるようになります。私が意味するのはこれです:-
これが列挙子の場合:-
[Serializable, DataContract(Namespace = "Company.Domain.LOB.Handler")]
[Flags]
public enum BankItemStatus
{
[EnumMember]
UnBatched,
[EnumMember]
Batched,
[EnumMember]
Sent,
[EnumMember]
ReplyReceived,
[EnumMember]
Closed
}
Enum を次のように使用する場合:-
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# での |= 演算子の使用を理解するのに役立つことを願っています (列挙子のコンテキストで)。