在if条件为真之后评估else

时间:2010-12-20 16:49:06

标签: c# if-statement

请考虑以下代码段:

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 个答案:

答案 0 :(得分:8)

未检查第二个条件,因为仅在前面的条件被评估为else时才会评估false语句。有几种方法可以解决这个问题,其中一些方法可以在其他答案中找到。一种方法是使用单个if语句,它结合了两个条件:

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

答案 1 :(得分:6)

仅在第一个条件不满足时才检查

else if

如果你想让它们都成立,你应该做

if(textBox1.MaxLength > 0 && textBox1.MaxLength < 32768)
{
   // do stuff here
}

答案 2 :(得分:2)

你想要第二个if语句运行,即使第一个是真的吗? 摆脱其他

答案 3 :(得分:1)

因为你正在使用else而不是另一个if。

答案 4 :(得分:1)

如果第一部分为假,它只会到达第二部分。如果你想检查两者,你应该这样做:

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

你可以看看&amp;&amp;像这样:

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

相同
if (A) { 
    if (B) { 
        //do something 
    } 
}

答案 5 :(得分:1)

我不太确定我是否理解你的问题,但是如果你想要同时执行if-then语句,你必须删除“else”。否则它只会执行firt if(如果是的话)。

答案 6 :(得分:1)

您永远不会达到第二个if,因为大于0的任何数字将满足第二个更严格条件之前的第一个if。换句话说,第一个if将匹配n > 0中的所有数字n,而第二个if匹配数字32768 > n > 0

答案 7 :(得分:1)

你的“else if”陈述没有发生的原因是因为

if (textBox1.MaxLength > 0) 

总是如此,因为MaxLength显然总是大于0,除非它被改为0。

我想补充说明

textBox1.MaxLength < 32768

可能也永远都是真的。

此外

  

当此属性设置为0时,   可以的文本的最大长度   输入控件仅限于   可用的记忆。

答案 8 :(得分:1)

认为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 sstatement仅在第一个为false时执行。

答案 9 :(得分:1)

我会这样做,如果我想说“如果MaxLength在0到32768之间”:

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

由于您在此时间间隔内执行相同操作,因此更适合在相同的条件语句中生成两者。