【问题标题】:Why C# allow this fun? ; ; ; ; [duplicate]为什么 C# 允许这种乐趣? ; ; ; ; [复制]
【发布时间】:2013-12-12 18:58:37
【问题描述】:

看我下面的代码

protected void Page_Load(object sender, EventArgs e)
{
    ExistsOnPath("efsui.exe"); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
    install(); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
}

我在 Visual Studio 中添加了更多分号符号。为什么视觉工作室允许这样做?它是错误的还是正确的?

查看此图片和红色标记。构建成功

但是这一行显示错误?

webClient.DownloadFile("http://www.who.int/inf-new/dnldtxt/introductions.zip", "";;;;;;;;;;;;;;;;);

又好玩,下面一行成功了

private void install()
    {
        http://www.stackoverflow.com
        return;
    }

【问题讨论】:

  • 请注意您当前使用的内容。它不是“Visual Studio”是否允许这种语法,而是语言 C#。
  • ; 是语句终止符,允许使用空语句。 for(;;) 之类的内容需要空语句。
  • ...还有this,有点像this,...
  • @RameshRajendran:不,不是。您可以在任何其他文本编辑器中尝试相同的操作;代码仍会编译 - 因为代码不是由 Visual Studio 编译的,它是由 C# 编译器根据 C# 语言规范编译的。

标签: c# syntax


【解决方案1】:

因为分号; 是有效的空语句

8.3 The empty statement

一个空语句什么都不做。

空语句:

;

当没有要执行的操作时使用空语句 需要声明的上下文。

空语句的执行只是将控制权转移到最后 声明的要点。因此,空语句的终点是 如果空语句可达,则可达。

另见: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 表示很好的答案和很好的解释。
  • 该死,写了同样的答案,等我写完,已经有4个答案了!
  • 请再看一次我的问题
  • @RameshRajendran,刚刚用您在方法参数中使用空语句更新了我的答案。
  • 没错。嗯不错
【解决方案2】:

; 可以在 C# 语言中用作空语句。因此,连续有许多; 很好,因为它只是一系列空语句。基本上没有操作

请注意,这不是 Visual Studio 行为,而是 C# 语言行为。 VB.Net 等其他语言的相同代码会产生编译错误

【讨论】:

    【解决方案3】:

    它成功是因为每条以分号结尾的语句都没有任何语法错误;他们是空的。现在,就生成的代码而言,这些语句不会生成任何内容。

    为了更好地理解它,您可能需要研究解析器的工作原理。

    【讨论】:

      猜你喜欢
      • 2016-12-15
      • 1970-01-01
      • 2021-04-19
      • 2013-07-10
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      相关资源
      最近更新 更多