请参阅我的以下代码
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;
}
答案 0 :(得分:10)
因为分号;
是有效的空语句
空语句什么都不做。
空语句:
当没有要执行的操作时,使用空语句 需要声明的上下文。
执行空语句只是将控制转移到结尾 声明的重点。因此,空语句的结束点是 如果可以访问空语句,则可以访问。
另见:Statements (C# Programming Guide) - 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 statements,并且冒号后的任何内容都被视为标签文本的一部分。上面的代码会产生警告
此标签尚未引用
答案 1 :(得分:3)
;
可以用作C#语言中的空语句。因此,连续多个;
就好了,因为它只是一系列空语句。基本上是无操作
请注意,这不是Visual Studio行为,而是C#语言行为。与VB.Net等其他语言相同的代码会产生编译错误
答案 2 :(得分:2)
成功,因为以分号结尾的每个语句都没有任何语法错误;他们是空的。现在,就生成的代码而言,不会为这些语句生成任何内容。
为了更好地理解它,你可能想研究解析器的工作原理。