#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. На самом деле я бы тоже предпочел это в этом случае. Его значение более понятно. Я просто показывал альтернативу. (возможно, это полезно в некоторых случаях)