2011-11-23 64 views
4

我可以寫c#:編寫v1的更短路! ? V2:V2

bool v1, v2; 
// ... 

編輯:我的困惑深表歉意。正確的說法應該是:

bool v3 = !v1 ? v2 : !v2; 

ORIGINAL我問

bool v3 = v1 ? v2 : !v2; 

更短?或者:是否有運營商會有相同的結果?

因此,我標記了Anders Abels的答案是正確的,因爲他回答了我最初的問題。我只需要反轉他的答案。

+0

您能否提供整個聲明不僅條件? – sll

回答

2

可以使用xor(在^運營商),這將給true如果一個操作數,只有一個是true。它會返回你想要的對面,所以你要否定一切:

!(v1^v2); 
+5

我認爲有趣的是,* xor *與*不等於*相同。所以你的表達和'v1 == v2'一樣。 – svick

11

我覺得v1==v2應該這樣做。

編輯:

爲更新的問題,這是v1!=v2,或v1^v2作爲安德斯說。

+0

簡單而優雅。我休息我的情況:-) –

+0

我認爲'v1!= v2'是最優雅的解決方案。 –

4

Vlad已經提供了正確的答案。我只是添加一個簡單的表格,可能有助於說明如何解決這些問題。

  | v2 = true | v2 = false | 
-----------+------------+------------+ 
v1 = true | false | true | 
-----------+------------+------------+ 
v1 = false | true | false | 
-----------+------------+------------+ 

編輯:該表已更新,以匹配更新的問題。

由於弗拉德已經提出了表達式可以重構爲!=。爲了澄清,添加了Paagesheses。編譯器不需要它們。

bool v3 = (v1 != v2); 
+0

我的錯誤。我沒有寫出正確的問題......他的回答現在已被標記出來。謝謝你的桌子。 – SACO