我现在已经想了一会儿;为什么使用分号;
而不是空块{}
并不总是有效?它在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!
根据我的理解,总是可以使用分号而不是空块。为什么这仅限于某些陈述?使用{ }
和;
后面的语句是否存在真正的区别?
答案 0 :(得分:1)
在某些情况下,代码块是可选的,在某些情况下是必需的。
如果是类或结构的方法,则需要一段代码(除非它是抽象或部分方法)。
如果是catch,还需要一个代码块(用于处理异常)。创建一个空的catch块被认为是错误的编程。
答案 1 :(得分:1)
正如@JeppeStigNielsen所解释的那样:
C#规范要求它。见第8章,声明。具体来说,
if
语句(第8.7.1节)包含嵌入语句,而try
语句(第8.10节)包含块。嵌入语句可以是许多事物中的任何一种,其中只有一个是块(8.2)。另一个是空语句(8.3)。有关这些定义,请参见第8章的开头。
从我能理解的内容[文档是if
,while
等语句等。期望任何类型的嵌入式语句。这些是诸如块{ }
,空语句;
等等。try
语句需要块而不仅仅是任何嵌入语句(参见第8章的开头)。
文档可以下载directly from Microsoft,也可以在本地硬盘C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Specifications\1033\
上找到(通过@JeppeStigNielsen)。