C #: более короткий способ написать v1!?v2:! v2 - PullRequest
4 голосов
/ 23 ноября 2011

Могу ли я написать

bool v1, v2;
// ...

РЕДАКТИРОВАТЬ: Я очень сожалею о путанице. Правильное утверждение должно быть:

bool v3 = !v1 ? v2 : !v2;

ОРИГИНАЛ Я попросил

bool v3 = v1 ? v2 : !v2;

еще короче? Или: есть ли оператор, который будет иметь такой же результат?

Поэтому я отметил ответ Андерса Абельса как правильный, потому что он ответил на мой первоначальный вопрос. Мне нужно только перевернуть его ответ.

Ответы [ 3 ]

11 голосов
/ 23 ноября 2011

Я думаю, v1==v2 должен это сделать.

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

Для обновленного вопроса это v1!=v2 или v1^v2, как сказал Андерс.

4 голосов
/ 23 ноября 2011

Влад уже дал правильный ответ. Я просто добавляю простую таблицу, которая может помочь показать, как можно решить подобные проблемы.

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

Изменить: таблица была обновлена ​​в соответствии с обновленным вопросом.

Как уже упоминал Влад, выражение может быть преобразовано в !=. Добавлены паразиты для уточнения. Они не нужны компилятору.

bool v3 = (v1 != v2);
2 голосов
/ 23 ноября 2011

Вы можете использовать xor (оператор ^), который даст true, если один и только один из операндов равен true.Он вернет противоположность того, что вы хотите, поэтому вы должны отрицать все:

!(v1 ^ v2);
...