Как мне отрицать это логическое выражение? - PullRequest
0 голосов
/ 14 ноября 2018

Итак, сейчас мой код имеет что-то вроде этого:

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) doSomething();

Я хочу сделать что-то вроде этого сейчас:

if(!InitialExpression) continue;

AFAIK, если A || B, отрицаниебудет !A && !B.Но это не работает: if(DateA > utcNow && (DateA != null || DateB > utcNow)) continue;.Когда DateA = null и DateB > utcNow должны упасть в продолжение, но это не так.

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

Моя ошибка заключалась в том, что противоположность DateA <= utcNow равна DateA > utcNow.Но это DateA == null || DateA > utcNow

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Противоположность DateA <= utcNow || (DateA == null && DateB <= utcNow) равна

(DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow)
0 голосов
/ 15 ноября 2018

С твоей логикой все было в порядке @Felipe. Просто ты упустил из виду крошечный аспект. Отрицание <= - это не только >, но и значение NULL. Просто добавьте эти 2 условия вместе с оператором OR. Это должно работать.

Проверьте обновленное утверждение ниже:

(DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow)
0 голосов
/ 14 ноября 2018
  • Вариант 1 - использовать оператор ELSE

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) {doSomething() }else{ dpSomethingElse();

  • Вариант 2 - использовать ! в операторе

if(!(DateA <= utcNow || (DateA == null && DateB <= utcNow))) doSomethingElse();

  • Вариант 3 - отрицание - условие DataA, не являющееся нулевым, должно идти первым. Некоторый контекст отсутствует, но предполагается, что вы хотите отменить выражение, гарантируя, что предпочтение отдается DateA, если оно больше, чем utcNow, в противном случае проверьте, что DateB больше, чем utcNow

if((DateA != null && DateA > utcNow) || DateB > utcNow) doSomethingElse()

...