2015-06-22 63 views
1

我有幾個布爾我需要檢查,變成一個布爾的可讀性:C#有沒有辦法可以&& =?

bool myBoolean = 5 == 5 && "string" == "String" && true && false && CheckSomethingElse(); 

有沒有一種方法,我可以打破這種爲多行,以使其更具可讀性?我可以這樣做:

bool myBoolean = 5 == 5; 
myBoolean = myBoolean && "string" == "String"; 
myBoolean = myBoolean && true; 
myBoolean = myBoolean && false; 
myBoolean = myBoolean && CheckSomethingElse(); 

但是我正在尋找沿此線的東西更多:

bool myBoolean = 5 == 5; 
myBoolean &= "string" == "String"; 
myBoolean &= true; 
myBoolean &= false; 
myBoolean &= CheckSomethingElse(); 

然而,第三代碼塊不會做同樣的事情,第一/第二(我所知道的)。 C#有沒有辦法提高第一個代碼塊的可讀性?還是有某種正常的方式來編寫這樣的布爾值?

+1

創建一個適當命名的方法 –

+0

BTW ..把你的情況分解成多行,這樣會使可讀性變得更糟。一條語句允許跨越多行,因此只需在您的第一行樣本中的每個&&前面添加一行。 –

+0

轉到MSDN並尋找c#操作符 –

回答

1

首先,我可能會同意一些關於重寫的JK等意見,但要根據SO指導方針實際回答您的問題,正確答案是否,因爲該操作符未在C#中定義,並且您不能重載像布爾類型那樣的新運算符。

我認爲你可以得到的是定義爲布爾類型

public static class BoolExtension{ 

    public static bool And(this Boolean first, bool second){ 
     first = first && second; 
     return first; 
    } 
    public static bool MultiAnd(this Boolean first, params bool[] others) 
    { 
     foreach (var b in others) first = first && b; 
     return first; 
    } 
} 

,然後使用它像這樣

bool myBoolean = 5 == 5; 
myBoolean.And("string" == "String"); 
myBoolean.MultiAnd("A"=="A","B"=="C","D"=="D"); 

正如你所看到的擴展方法是最好的,這可能幫助不大具有可讀性。

有些人最終通過定義一個結構/類具有布爾裏面和做你喜歡的運算符重載實現了在這種情況下,布爾類Decorator模式。

+0

,這可能是一個很好的答案,請不要定義這樣的擴展方法! - >「正如你所看到的,這對可讀性可能沒有多大幫助。」 ! –

+0

@MitchWheat我個人從未做過 – n00b

+1

如果你使用'params',爲什麼你需要不同的方法來處理單個'bool'和多個'bool'?如果刪除'And'並將'MultiAnd'重命名爲'And',它將以同樣的方式工作:) –

7

爲了增強可讀性,只需解壓出來到一個名爲方法,其中該方法的名稱立刻告訴你的意圖:

public bool FluxCapacitorIsReady() 
{ 
    return 5 == 5 
      && "string" == "String" 
      && true 
      && false 
      && CheckSomethingElse(); 
} 

現在,你可以調用這個方法在你的代碼,它是清醒時立即給任何讀者是怎麼回事:

if (FluxCapacitorIsReady()) 
    StartFluxCapacitor(); 

這是清潔代碼的一個概念:看http://cleancoders.com更多。

+2

這並不回答整個問題。它提供了一個很好的選擇,但它不是一個完整的答案。 – Enigmativity

+0

它回答了這個問題:「我需要檢查並將其轉換爲一個可讀性布爾值:」 –

+0

@MitchWheat - 我更關心標題「Does C#有一種方法可以&& =?」。 – Enigmativity

相關問題