空分号和开闭花括号有效
Empty Semicolon and Open Closed Curly Brace is Working
我有控制台应用程序项目支持分配给我,所以我决定在某些 class 中进行代码审查,并且在我进行代码审查时我 运行 一些行只包含一个分号,另一行是一个空的开闭花括号,所以我预计编译器会抛出错误,所以我尝试 运行 控制台应用程序,但它工作正常,没有错误迹象,我以为我的编译器有问题所以我决定重新安装它,但控制台应用程序仍然工作正常,所以我决定创建一个新方法来测试分号和花括号我还尝试制作一个嵌套的花括号并使用 Console.WriteLine()
在里面,它的工作令人惊讶。谁能解释为什么会这样,或者只是我和我的编译器?
static void TestMethod()
{
;
{ }
; { }
{ ; }
{ };
{
{
{
{
{
{
{
Console.WriteLine("Hello, World!");
Console.Read();
}
}
}
}
}
}
}
}
Empty statements are allowed in C#.
An empty statement is used when there are no operations to perform in
a context where a statement is required.
Execution of an empty statement simply transfers control to the end
point of the statement. Thus, the end point of an empty statement is
reachable if the empty statement is reachable.
另请注意 the definition of a block。块内的语句是可选的。
A block consists of an optional statement-list (Section 8.2.1),
enclosed in braces. If the statement list is omitted, the block is
said to be empty.
另见 comments about this "feature" from Eric Lippert。 (正如@Kobi 在上面的评论中提到的那样。)
注意:人们经常引用诸如这段代码的例子作为空语句的理由:
while (readNextChar() == ' ') // Skip spaces
;
或者可怕的:
while (readNextChar() == ' '); // Skip spaces
但就个人而言,如果必须将其写为:
,我会很高兴
while (readNextChar() == ' ')
{
// Skip spaces
}
但是,这确实说明了您可能需要空块的原因(我对此没有意见)。
我有控制台应用程序项目支持分配给我,所以我决定在某些 class 中进行代码审查,并且在我进行代码审查时我 运行 一些行只包含一个分号,另一行是一个空的开闭花括号,所以我预计编译器会抛出错误,所以我尝试 运行 控制台应用程序,但它工作正常,没有错误迹象,我以为我的编译器有问题所以我决定重新安装它,但控制台应用程序仍然工作正常,所以我决定创建一个新方法来测试分号和花括号我还尝试制作一个嵌套的花括号并使用 Console.WriteLine()
在里面,它的工作令人惊讶。谁能解释为什么会这样,或者只是我和我的编译器?
static void TestMethod()
{
;
{ }
; { }
{ ; }
{ };
{
{
{
{
{
{
{
Console.WriteLine("Hello, World!");
Console.Read();
}
}
}
}
}
}
}
}
Empty statements are allowed in C#.
An empty statement is used when there are no operations to perform in a context where a statement is required.
Execution of an empty statement simply transfers control to the end point of the statement. Thus, the end point of an empty statement is reachable if the empty statement is reachable.
另请注意 the definition of a block。块内的语句是可选的。
A block consists of an optional statement-list (Section 8.2.1), enclosed in braces. If the statement list is omitted, the block is said to be empty.
另见 comments about this "feature" from Eric Lippert。 (正如@Kobi 在上面的评论中提到的那样。)
注意:人们经常引用诸如这段代码的例子作为空语句的理由:
while (readNextChar() == ' ') // Skip spaces
;
或者可怕的:
while (readNextChar() == ' '); // Skip spaces
但就个人而言,如果必须将其写为:
,我会很高兴while (readNextChar() == ' ')
{
// Skip spaces
}
但是,这确实说明了您可能需要空块的原因(我对此没有意见)。