Сокращение условия C #

#c# #syntax #conditional-statements

#c# #синтаксис #условные операторы

Вопрос:

Учитывая следующее условие:

 bool roundUp = (useSharps amp;amp; lowerHalf) || (!useSharps amp;amp; !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
  

Обновить:
Возможно, я ошибся в своем коде. Конечный результат, который я ищу, — это то, что находится в таблице.

Ответ №1:

Поскольку вы хотите, чтобы ваши переменные useSharps и lowerHalf были эквивалентны (либо оба false, либо оба true), вы можете просто проверить равенство:

 var roundUp = useSharps == lowerHalf;
  

Редактировать

Если я правильно интерпретирую вашу таблицу, ваш код идеально подходит для нее (а также сокращенная версия в моем ответе). Сама таблица может быть упрощена до этого:

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

Комментарии:

1. Отредактированный мой ответ, я думаю, что ваш код и таблица идеально совпадают. Пожалуйста, объясните, если я что-то перепутал.

Ответ №2:

Если вам нужно одно true и другое значение false , вы можете использовать:

 var roundUp = useSharps == !lowerHalf;
  

Ответ №3:

Другие ответы проще, но я просто хочу указать другой способ. Вы можете проверить, имеют ли 2 логические переменные разные значения, используя оператор xor .

 useSharps ^ lowerHalf
  

Если это возвращает true, они имеют разные значения, если false, они имеют одинаковое значение.

Комментарии:

1. Хороший момент, но тогда я должен перепроверить, являются ли они истинными или нет.

2. Лично я предпочитаю использовать != при проверке, являются ли два логических значения неравными, поскольку я чувствую, что это более очевидно для того, что он делает. Оператор XOR ^ по-прежнему очень полезен для битовых операций, т.е. для байтовых значений.

3. @Chips_100 вопрос не в предпочтениях, я предпочитаю смотреть на него, работает он или нет. Я бы предпочел этот ответ, если он сработает.

4. @Chips_100. Вы правы. но я буду придерживаться useSharps == lowerHalf того, что явно короче.

5. На самом деле я бы тоже предпочел это в этом случае. Его значение более понятно. Я просто показывал альтернативу. (возможно, это полезно в некоторых случаях)