-9
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#。

4

5 回答 5

3

这些在 C# 中一直是合法的。在 C# 中,大括号是可选的,并且仅在块多于一条语句时才需要。

C# 规范的第 5.3.3.5 节指出“If 语句”是if (expr) then-stmt,因此任何语句都可以跟在if.

if后面是一个声明。C# 语言规范的 8.2 允许大括号括起来statement-list,然后形成一个“块”。一个块,来自规范:

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

在您的情况下,第if 一个语句后面是由您的第二个语句组成的if语句。

于 2013-06-11T18:13:01.140 回答
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 语句都不能处理超过一个块。

于 2013-06-11T18:12:50.077 回答
0

这种说法没有错。在没有大括号的情况下,第一个 If 仅包含以下块或行。由于下一行开始了另一个 If 块,因此将所有内容都包括在内。它在 C# 中一直是合法的。

于 2013-06-11T18:12:59.313 回答
0

这些一直是合法的。

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

于 2013-06-11T18:16:00.183 回答
-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);
    }
}
于 2013-06-11T18:13:21.220 回答