2013-06-28 128 views
2

在研究中的錯誤的原因,我碰到這行代碼來的?什麼是C#中的「| =」運算符? |在C#「=」操作</p> <pre><code>Status |= (int)states.Reading; </code></pre> <p>什麼是:

「狀態」 正是如此定義:

public static int Status 

...與訪問者和突變(或 「吸氣」 和 「二傳手」),而 「國家」 的定義是這樣的:

[Flags] 
public enum states 
+2

但整條線沒有被註釋掉? – JustinStolle

+0

哦,是的,你是對的 - 這是顯而易見的,但不是在編輯器(由於顏色語法突出顯示(我的VS2003設置缺乏))。所以,我會相應地編輯問題。 –

+0

關閉,但沒有笨蛋:http://stackoverflow.com/questions/5705262/what-does-pipe-mean-in-c –

回答

9

這是 「按位邏輯或」 運算符,如定義here.

x |= y相當於x = x | y

此外,如果你想了解更多關於「|」您可以這樣做here.

2

如果您在「enum」成員的頂部指定了[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#=運算符(在普查員的情況下)。

+0

偉大的答案,謝謝;我曾經給另一隻貓提供了更爲詳細的答案,並且原來被授予答覆者哭得不可開交,所以我已經改變了一個我已經標記爲正確的答案,所以我會盡可能地離開接受的答案,儘管這個答案很好。順便說一下,「BatchItemStatus」應該是枚舉定義中的「BankItemStatus」。 –