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#。
答案 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);
}
}