这些嵌套if语句何时合法?

时间:2013-06-11 18:10:43

标签: c# .net if-statement

if (blah.Text != string.Empty)
    if (rowViewFilter == string.Empty)
        rowViewFilter = string.Format("(name = '{0}')", blah.Text);
    else
        rowViewFilter += string.Format(" and (name = '{0}')", blah.Text);

我以为在第一行之后我需要大括号。但似乎工作得很好。为了记录,我使用的是VS2012,.NET 4.5,C#。

5 个答案:

答案 0 :(得分:3)

这些在C#中一直合法。在C#中,大括号是可选的,只有在块不止一个语句时才需要。

C#规范的第5.3.3.5节规定“If Statement”为if (expr) then-stmt,因此任何语句都可以跟if

if之后是一个声明。 8.2#C#语言规范允许大括号括起一个语句列表,然后形成一个“块”。一个块,来自规范:

  

允许在允许单个语句的上下文中写入多个语句。

在您的情况下,第一个if后跟一个由您的第二个if声明组成的声明。

答案 1 :(得分:0)

从技术上讲,你的嵌套if / else语句:

if (rowViewFilter == string.Empty)
    rowViewFilter = string.Format("(name = '{0}')", blah.Text);
else
    rowViewFilter += string.Format(" and (name = '{0}')", blah.Text);
就原始的if语句而言,

是所有代码的“块”或“行”。

任何if语句都不会处理多个块。

答案 2 :(得分:0)

该陈述没有错。在没有括号的情况下,第一个If仅包含以下块或行。由于下一行开始另一个If块,所以它都包括在内。它在C#中一直是合法的。

答案 3 :(得分:0)

这些都是合法的。

这会造成名为Dangling Else Problem的混淆,因为else属于最近的if,有人可能认为它属于第一个。

答案 4 :(得分:-1)

始终在C#中合法。这是因为当块跨越多个语句时,您可以省略大括号。它与

相同
if (blah.Text != string.Empty)
{
    if (rowViewFilter == string.Empty)
    {
        rowViewFilter = string.Format("(name = '{0}')", blah.Text);
    }
    else
    {
        rowViewFilter += string.Format(" and (name = '{0}')", blah.Text);
    }
}