【发布时间】:2015-05-31 20:59:04
【问题描述】:
我一直在想这个问题;为什么使用分号 ; 而不是空块 {} 并不总是有效的?在while、for、if、else 等语句上使用它时可以使用它。但它不适用于try、catch、finally 和 delegate(可能更少)留空有用)。
所以这样做是有效的:
while(shouldIWait()); // This is normal
try {
doThing(); // Might throw an exception
} catch { } // Ignore the exception
但这不会:
try {
doThing(); // Might throw an exception
} catch; // Syntax error!
据我了解,始终可以使用分号代替空块。为什么这仅限于某些陈述? { } 和 ; 后面语句的用法有真正的区别吗?
【问题讨论】:
-
你也不能使用分号作为一个空的方法体。
-
@Dennis_E 这个问题更像是一个逻辑流问题。就像这样做:
if(foo) if(bar) baz(); else bor(); else beer(); -
这是 C# 规范所要求的。请参阅第 8 章,声明。具体来说,
if语句(第 8.7.1 节)包含一个 embedded-statement,而try语句(第 8.10 节)包含一个块。 embedded-statement 可以是多种事物中的任何一种,其中只有一个是 block (8.2)。另一个是empty-statement (8.3)。有关这些定义,请参见第 8 章的开头。 -
感谢@JeppeStigNielsen,阅读第 8.7.1、8.8(部分)和 8.10 章节后,其背后的推理变得更加清晰。 C# 规范本身对我来说似乎是一本好书。