Если логика условия не работает - PullRequest
3 голосов
/ 20 марта 2012

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

Вот моя логика, но она не удалась. Я хотел вот так, если метка содержит «Нет совпадений» или «Время ожидания», не должно продолжаться.

If((!label.Text.Contain("No match")) || label.Text.Contain("Time out"))
{
// proceed further code
}
else
{
// code 
}

Здесь метка содержит «Нет совпадения», затем она перемещается в другую часть, которая является правильной. Но когда метка содержит «Тайм-аут», то она идет внутри цикла if. Поэтому я изменил код следующим образом

If((!label.Text.Contain("No match")) || (!label.Text.Contain("Time out")))
{
// proceed further code
}
else
{
// code 
}

все еще не работает. Если метка содержит «Time out», она все равно входит в цикл if not else loop.Label содержит только один текст за раз: «No match» или «Time out», или любой другой текст.

Ответы [ 3 ]

5 голосов
/ 20 марта 2012

Я подозреваю, что вы хотите:

if(!(label.Text.Contains("No match") || label.Text.Contains("Time out")))
{
    // proceed further code
}
else
{
   // code 
}

Обратите внимание на брекетинг. Внутренняя часть

label.Text.Contains("No match") || label.Text.Contains("Time out")

а затем это перевернуто. Я бы, наверное, вытащил это в отдельную переменную:

bool timedOutOrNoMatch = label.Text.Contains("No match") || 
                         label.Text.Contains("Time out");
if (!timedOutOrNoMatch)
{
}
else 
{
}

В качестве альтернативы, инвертируйте смысл этого:

if (label.Text.Contains("No match") || label.Text.Contains("Time out"))
{
    // Do whatever was in your else block.
}
else
{
    // Do whatever was in your first block.
}

Если ваш ответ на «плохие» метки позволяет вам вернуть или выбросить исключение, это также может уменьшить количество вложений:

if (label.Text.Contains("No match") || label.Text.Contains("Time out"))
{
    output.Text = "Go away";
    return;
}
// Now handle the success case
2 голосов
/ 20 марта 2012

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

bool ProceedFurther()
{
  //Don't proceed if No Match
  if(!label.Text.Contains("No match")) return false;

  //Don't proceed if Time out
  if(!label.Text.Contains("Time out")) return false;

  //Proceed otherwise
  return true;
}

и вызов метода ProceedFuture в нужном месте.

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

if(!label.Text.Contains("No match") && !label.Text.Contains("Time out")) 
2 голосов
/ 20 марта 2012

Попробуйте ввести следующий код:

    if(!(label.Text.Contains("No match") || label.Text.Contains("Time out")))
    {
    // proceed further code
    }
    else
    {
    // code 
    }

Если вы хотите получить правый вариант с измененным кодом, используйте оператор AND:

       if(!label.Text.Contains("No match") && !label.Text.Contains("Time out"))
        {
        // proceed further code
        }
        else
        {
        // code 
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...