2011-03-02 73 views
1

在C#.NET中,有沒有人看過類似這樣的方法中的return語句?與Return語句一起使用時,BitWise OR(「|」)是什麼意思?

protected override Buttons GetButtonsToShow() 
{ 
    return Buttons.New | Buttons.Return | Buttons.Delete; 
} 

這個BitWise運算符是如何「|」在這裏工作?這個聲明的結果是什麼?我知道BitWise運營商是如何工作的,如果......其他...語句等,但我從來沒有見過這種方式。

回答

7

Buttonsflagsenum

這使得它可以在可以使用位運算符合並值的位置映射。

在這種情況下,它將返回一個結合所有三個選項的位圖值。

This博客文章有一個相當明確的解釋(雖然它使用&爲例)。

+0

謝謝你,Oded。我會花一點時間來完全掌握該博客中的信息,但我相信這將會非常有幫助。 – campbelt 2011-03-02 21:14:37

+0

@campbelt - 理解的主要概念是'FlagsAttribute'在二進制中的作用和想法(畢竟二進制是爲什麼使用按位運算符)。 – Oded 2011-03-02 21:17:27

0

如果你打破這個表達式將會變得更加清晰:

protected override Buttons GetButtonsToShow() 
{ 
    var returnValue = Buttons.New | Buttons.Return | Buttons.Delete; 
    return returnValue; 
} 

你現在可以看嗎?

運營商|不會改變返回語句本身。函數返回Buttons.New | Buttons.Return | Buttons.Delete表達式的結果。

+0

你確定是這樣嗎?我在這裏是全新的,所以我肯定可能是錯的,但我不確定這是否像條件聲明那樣工作,如果這就是你的意思。 – campbelt 2011-03-02 21:15:46

1

從邏輯上講,這樣的方法返回一組標誌(enum標有Flags屬性)。稍後,您可以使用按位&來檢查是否設置了某個標誌。

在這個特定的例子中,有代碼檢查是否顯示某個按鈕。類似這樣的:

Buttons buttons = GetButtonsToShow(); 

bool showNewButton = (buttons & Buttons.New) != 0; 
+0

完美,謝謝!這與Oded的迴應以及他引用的博客文章一致。我要回顧一下這個博客,看看我能不能圍繞這個問題。 – campbelt 2011-03-02 21:16:55

+0

@campbelt - 不客氣:)如果你覺得它有用,你可以提高答案。 – 2011-03-02 21:19:46

0

它正在執行按位運算並將結果用作返回值。按鈕是具有應用了FlagsAttribute看起來類似以下內容的枚舉:

[Flags] 
public enum Buttons 
{ 
    New = 1, 
    Return = 2, 
    Delete = 4 
} 

從GetButtonsToShow返回值的使用()方法是這樣的:

private void DisplayButtons() 
{ 
    var buttons = GetButtonsToShow(); // int value is 7, 1 + 2 + 4 

    if ((buttons & Buttons.New) == Buttons.New) // if 7 (111) and 1 (001) equals 1 
    { 
     buttonNew.Visible = true; 
    } 

    // above is for clarity, most likely all buttons visibility is set as: 
    // buttonX.Visible = (buttons & Buttons.X) == Buttons.X; 
}