Как проверить две строки внутри, если условие - PullRequest
0 голосов
/ 27 февраля 2020

Я знаю, что это немного глупый вопрос, и прошу прощения за это. Но я немного запутался по этому поводу.

Мне нужно проверить, когда backToLobbyStatus.ErrorMessage не равно Success или Success2 нужно установить validationResult = backToLobbyStatus; Поэтому я написал код как,

if (  (assistCustomer != null && backToLobbyStatus.ErrorMessage != "Success") 
   || (assistCustomer != null && backToLobbyStatus.ErrorMessage != "Success2")) {
 validationResult = backToLobbyStatus;
}

но когда backToLobbyStatus.ErrorMessage == "Success", это условие assistCustomer != null && backToLobbyStatus.ErrorMessage != "Success2" сбывается, что я тут не так сделал. Как правильно справиться с этим без вложенного, если условия. или является вложенным, если это самый правильный способ справиться с этой ошибкой?

Ответы [ 4 ]

1 голос
/ 27 февраля 2020

Не делайте одно и то же сравнение (assistCustomer!=null) дважды:

if (assistCustomer != null)
{
   if(backToLobbyStatus.ErrorMessage != "Success") 
   || backToLobbyStatus.ErrorMessage != "Success2")
   {
     validationResult = backToLobbyStatus;
   }
}

Легко увидеть, что сравнение "- это сообщение об ошибке, а не успех ИЛИ не успех2.

Если сообщение об ошибке «Успех», то оно не может быть «Успех2», поэтому будет запущено второе сравнение. Я подозреваю, что вы действительно хотите && вместо ||

   if(backToLobbyStatus.ErrorMessage != "Success") 
   && backToLobbyStatus.ErrorMessage != "Success2")
   {
     validationResult = backToLobbyStatus;
   }
0 голосов
/ 27 февраля 2020

Вы можете использовать Enumerable.Contains с массивом, например:

var successMessages=new[]{"Success","Success2"};

...
if (assistCustomer != null  && !successMessages.Contains(backToLobbyStatus.ErrorMessage))
{
    ...
}

Вы можете использовать другую коллекцию, например HashSet<T>, для ускорения поиска, но только с 2 элементами, это не стоит того.

0 голосов
/ 27 февраля 2020

Использование досрочного возврата, что сократит вложенные операторы.

if(assistCustomer == null){
    return;
}
if ( backToLobbyStatus.ErrorMessage == "Success") || ( backToLobbyStatus.ErrorMessage == "Success2") { 
    return;
}
validationResult = backToLobbyStatus;

Досрочное возвращение исключает любые «легкие для оценки» случаи ранее и имеет дело со сложными делами.

В целом, раннее возвращение верните все недействительные случаи, чтобы вы могли обработать нормальный случай в его конце.

Однако ваш "нормальный" случай обрабатывает недействительные случаи, которые могут иногда случаться.

Эта практика полезна и проста достигать. Я предлагаю использовать его как можно чаще, если только нет одного утверждения, и вы уверены, что оно никогда не будет расти.

0 голосов
/ 27 февраля 2020

Используйте метод String.IsNullOrEmpty () для проверки на нулевое значение и используйте String.Equals () для сравнения. Вот лучшее решение

if(!String.IsNullOrEmpty(backToLobbyStatus.ErrorMessage)
{
 validationResult = ((backToLobbyStatus.ErrorMessage.Equals("Success") ||
                   backToLobbyStatus.ErrorMessage.Equals("Success2"))?
                   backToLobbyStatus: string.empty; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...