考慮這個功能,你能想到的一個真值表:如何避免在C#中不可能的布爾狀態?
public Foo doSomething(bool a, bool b) {
if (a && b) return doAB();
else if (a && !b) return doA();
else if (!a && b) return doB();
else if (!a && !b) return doNotANotB();
else throw new Exception("Well done, you defeated boolean logic!");
}
編譯器堅持去年else
條款。但從真理表的角度來看,這是一個不可能的狀態。
是的,它的作品,是的,我可以忍受它。但我想知道是否有一些機制在C#中以避免這種類型的代碼,或者如果我錯過了明顯的東西?
UPDATE:
獎勵積分,和純粹出於好奇,是否有與這種不同的事情處理任何語言?也許這不是一個語言問題,而是一個聰明的編譯器(但邊緣案例將是難以想象的複雜,我想)。
是的,我有這樣的機制:簡單地放棄最後一個「if」的條件。 – dasblinkenlight
非常真實!潘打算。但如果可能的話,我希望代碼是「可讀的」或「富有表現力的」。請記住這是一個簡單的例子。而且在7個月內,我會抓住我的腦袋,想知道我在寫什麼時想的是什麼(因此是表達代碼的優先考慮)。 –
如果這些動作與彼此不相關,我不會使用'if/else if'模式,而是使用四個單獨的'if'模塊,然後拋出異常以滿足編譯器。但在大多數情況下,「默認」操作完全符合空白的「else」。 –