C#是否支持没有大括号的if代码块?

26

C# 会如何编译这段代码?

if (info == 8)
    info = 4;
otherStuff();

它会包括代码块中的后续行吗?

if (info == 8)
{
    info = 4;
    otherStuff();
}

还是只需要下一行?

if (info == 8)
{
    info = 4;
}
otherStuff();
6个回答

65

是的,它支持 - 但它接受下一个语句,而不是下一行。例如:

int a = 0;
int b = 0;
if (someCondition) a = 1; b = 1;
int c = 2;

等价于:

int a = 0;
int b = 0;
if (someCondition)
{
    a = 1;
}
b = 1;
int c = 2;

个人而言,我总是在 if 语句的主体周围加上大括号,而且我遇到的大多数编码约定都采用了同样的做法。


9
if (info == 8)
{
    info = 4;
}
otherStuff();

4
它的工作方式类似于 C/C++ 和 Java。没有花括号,它只包含下一条语句。

你会相信吗,即使有大括号,它也只运行下一条语句? - Anthony Pegram

2
在 C# 中,if语句是基于括号来运行命令的。如果没有括号,它会在语句为真时运行下一条命令,然后运行其后的命令。如果条件为假,则继续执行下一条命令。
因此,
if( true )
    method1();
method2();

将会和原来一样

if( true )
{
    method1();
}
method2();

1

是的,它支持没有大括号的if代码块,只有在if后的第一条语句将被包含在if块中,就像您的第二个示例中一样


0
它只获取下一行,所以你的示例会编译成第二个可能结果的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接