2014-06-30 70 views
0

考慮以下條件:縮短C#條件

bool roundUp = (useSharps && lowerHalf) || (!useSharps && !lowerHalf); 
//which means roundUp will be false if useSharps but !lowerHalf, 
//or if !useSharps but lowerHalf 

有一個較短的方法來確定roundUp

以下是可能的選項:

  |  useSharps  |  !useSharps  | 
      |lowerHalf|!lowerHalf|lowerHalf|!lowerHalf| 
      ------------------------------------------- 
    roundUp| V |  X | X |  V | 
    !roundUp| X |  V | V |  X | 
      ------------------------------------------- 

      V = true, X = false 

更新:
也許我錯了我的代碼。我正在尋找的最終結果是表中的內容。

回答

17

當你希望你的變量useSharpslowerHalf是等同的(或者兩者虛假或兩者真),你可以檢查等式:

var roundUp = useSharps == lowerHalf; 

編輯

如果我理解你的表正確地說,你的代碼完全適合它(以及我的答案中的縮短版本)。該表本身可以簡化爲這樣:

lowerHalf | useSharps | roundUp 
-------------------------------- 
    0  |  0  | 1 
    0  |  1  | 0 
    1  |  0  | 0 
    1  |  1  | 1 
+0

編輯我的答案,我認爲你的代碼和表格完美匹配。請解釋一下,如果我弄混了一些東西。 –

2

如果你需要一個值true和另一false,你可以使用:

var roundUp = useSharps == !lowerHalf; 
2

其他的答案更容易,但我只是想指出其他方式。 您可以通過使用異或運算符來檢查2個布爾變量是否具有不同的值。

useSharps^lowerHalf 

如果這返回true,它們具有不同的值,如果爲false,它們具有相同的值。

+0

好點,但我必須重新檢查它們是否屬實。 – Shimmy

+0

就個人而言,當檢查兩個布爾值是否不相等時,我更喜歡使用'!=',因爲我覺得它更明顯。 XOR「^」運算符對位操作(即字節值)仍然非常有用。 –

+0

@Chip_100問題不是偏好,我更願意看它是否有效。如果它能工作,我更喜歡這個答案。 – Shimmy