2012-12-21 43 views
10

什麼是短,優雅的,按位的方式來寫的這個C#代碼的最後一行,而無需編寫b兩次:否定基礎上的布爾另一個布爾

bool getAsIs = .... 
bool b = .... 

getAsIs ? b : !b 
+0

我想知道你爲什麼會做這樣的事情?僅僅因爲寫了'b'兩次?性能?我認爲這些都不是深刻的原因。 – nemo

+0

爲了簡潔/可讀性和性能,因爲在我的情況下獲得'b'實際上涉及取消引用三個屬性。 – HappyNomad

+1

我很確定VM /編譯器會以任何方式優化它(取消引用以及指令),但是被證明是錯誤的會很有趣。而且有點混亂確實對可讀性沒有任何好處:D – nemo

回答

24

真值表可表示爲:

getAsIs b getAsIs ? b : !b 
-------------------------------- 
0   0 1 
0   1 0 
1   0 0 
1   1 1 

結果可以表示爲:

result = (getAsIs == b); 
+0

+1:儘可能容易 – horgh

+1

+1爲真值表和最簡單的答案 – HappyNomad

+0

其實,我可以根據這個答案重新構建我的問題。也就是說,我可以將'getAsIs'重命名爲'targetValue'。 – HappyNomad

3

我認爲這是

var foo = !(getAsIs^b) 

短,優雅,但絕對是一個頭餅刷!