为什么C#允许这个有趣? ; ; ; ;
看我下面的代码
protected void Page_Load(object sender, EventArgs e) { ExistsOnPath("efsui.exe"); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; install(); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; }
我在visual studio中添加了更多的分号符号。 为什么visual studio允许这个? 这是错的还是正确的?
看到这个图像和红色标记。 构建成功
但错误显示在这一行?
webClient.DownloadFile("http://www.who.int/inf-new/dnldtxt/introductions.zip", "";;;;;;;;;;;;;;;;);
另一个有趣的是,下面的一行是成功的
private void install() { http://www.stackoverflow.com return; }
因为分号;
是一个有效的空语句
8.3空话
空语句什么都不做。
空语句:
;
如果在需要语句的上下文中没有要执行的操作,则使用空语句。
执行空语句只是将控制转移到语句的结束点。 因此,如果可以访问空语句,则可以访问空语句的结束点。
另请参阅: 语句(C#编程指南) – MSDN
空语句由单个分号组成。 它什么都不做,可以在需要声明但不需要执行任何操作的地方使用。
编辑:
webClient.DownloadFile("http://www.who.int/inf-new/dnldtxt/introductions.zip", ;;;;;;;;;;;;;;;;"");
但为什么错误显示在这一行?
好吧 分号是一个有效的空语句,但这并不意味着您可以将它放在代码中的任何位置。 DownloadFile
方法需要两个参数,你可以在其中放置任何语句,如:
webClient.DownloadFile("http://www.who.int/inf-new/dnldtxt/introductions.zip", Console.Write("Some Text");, "");
Console.Write
本身是一个有效的语句,但它不能用于参数。
为什么这段代码编译:
private void install() { http://www.stackoverflow.com return; }
因为它将http:
作为Labeled语句处理,并且冒号后的任何内容都被视为标签文本的一部分。 上面的代码会产生警告
此标签尚未引用
的;
可以在C#语言中用作空语句。 因此有很多;
连续就好了,因为它只是一系列空语句。 基本上是无操作
请注意,这不是Visual Studio行为,而是C#语言行为。 与VB.Net等其他语言相同的代码会产生编译错误
它成功,因为每个以分号结尾的语句都没有任何语法错误; 他们是空的。 现在,就生成的代码而言,不会为这些语句生成任何内容。
为了更好地理解它,您可能想要研究解析器的工作原理。