оценивая остальное, если после условия if верно - PullRequest
3 голосов
/ 20 декабря 2010

Рассмотрим этот фрагмент:

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.MaxLength > 0)
    {
        textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();
    }
    else if (textBox1.MaxLength < 32768)
    {
        textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();
    }                
}

Почему не оценивается второе условие (условие меньше)? Это тоже правда, не правда ли?

Если я должен заставить второй работать в том же состоянии, какие незначительные изменения должны быть сделаны?

Ответы [ 10 ]

8 голосов
/ 20 декабря 2010

Второе условие не проверяется, поскольку оператор else будет оцениваться только тогда, когда предыдущие условия оценены как false. Есть несколько способов исправить это, некоторые из которых показаны в других ответах. Одним из таких способов является использование одного оператора if, который объединяет оба условия:

if (textBox1.MaxLength > 0 && textBox1.MaxLength < 32768)
{
    textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();
}
6 голосов
/ 20 декабря 2010

else if проверяется только в том случае, если не выполнено первое условие.

Если вы хотите, чтобы они оба были правдой, вы должны сделать

if(textBox1.MaxLength > 0 && textBox1.MaxLength < 32768)
{
   // do stuff here
}
2 голосов
/ 20 декабря 2010

Вы хотите, чтобы второй оператор if выполнялся, даже если первый был истинным?Избавиться от всего остального

1 голос
/ 20 декабря 2010

Я бы сделал это, если бы хотел сказать «если MaxLength находится между 0 и 32768»:

if (0 < textBox1.MaxLength && textBox1.MaxLength < 32768)
    textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();

Поскольку вы делаете то же самое в этом интервале, более целесообразно сделать оба в одном и том же условии.

1 голос
/ 20 декабря 2010

Представьте, что else if действительно написано так:

private void button1_Click(object sender, EventArgs e)
{
    //textBox2.Text += Convert.ToString (textBox1.Text + "garment");
    if (textBox1.MaxLength > 0)
    {
        textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();
    }
    else
    {
        if (textBox1.MaxLength < 32768)
        {
            textBox2.Text = Convert.ToBoolean(Math.Sqrt(textBox1.MaxLength)).ToString();
        }
    }
}

Это то же самое.Обратите внимание, что второе состояние if выполняется только тогда, когда первое ложно.

1 голос
/ 20 декабря 2010

Причина, по которой ваше утверждение "else if" не выполняется, заключается в том, что

if (textBox1.MaxLength > 0) 

всегда истинно, поскольку MaxLength, очевидно, всегда будет больше 0, если только оно не было изменено на 0.

Я хотел бы добавить, что

textBox1.MaxLength < 32768

Вероятно, также всегда будет истинным.

Дополнительно

Когда это свойство установлено в 0,максимальная длина текста, который можно ввести в элемент управления, ограничена только доступной памятью.

1 голос
/ 20 декабря 2010

Вы никогда не достигнете второго if, потому что любое число больше 0 будет удовлетворять первому if перед вторым, более ограничительным условием. Проще говоря, первый if будет соответствовать всем числам n, где n > 0, тогда как второй if соответствует номерам 32768 > n > 0.

.
1 голос
/ 20 декабря 2010

Я не совсем уверен, правильно ли я понимаю ваш вопрос, но если вы хотите, чтобы выполнялись оба оператора if-then, вы должны удалить «else». В противном случае он будет выполняться только в том случае, если (если это правда).

1 голос
/ 20 декабря 2010

Он достигнет второй части, только если первая ложная. Если вы хотите проверить против обоих, вы должны сделать это:

 if (textBox1.MaxLength > 0 && textBox1.MaxLength < 32768)

Вы можете посмотреть на && так:

if (A && B) {
    //do something
} 

совпадает с

if (A) { 
    if (B) { 
        //do something 
    } 
}
1 голос
/ 20 декабря 2010

Потому что вы используете else, если вместо другого if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...