【问题标题】:C# for loop syntaxC# for 循环语法
【发布时间】:2019-01-17 22:14:51
【问题描述】:

我正在编写一些具有我以前从未见过的循环语法的 C# 代码:

for (;;)
{
  //Do some stuff
}

没有init; condition; 或increment 的for 循环有什么作用?顺便说一句,在我尝试过的任何搜索引擎上,对于"for (;;) c#",在互联网上都很难找到有意义的搜索结果。

-埃里克

【问题讨论】:

  • If null is null then keep going. At the end , null + null 是我一直以来的阅读方式。如果我没记错的话,这是一个无限循环
  • 除非有休息、投掷或其他什么,否则它会继续吗?
  • @Symon 您的评论实际上是一个答案。请将其发布为答案,以便我们对其进行投票:)
  • 空的条件语句才是真正的关键。如果没有条件,循环将永远运行,除非块内的某些东西终止它。我相信通常认为写while(true) 更有意,因为它明确说明了无限循环条件(并且while 条件不是可选的)。
  • 它在 C 的早期是半惯用的。(我记得有人写的一个“可爱”的宏看起来像#define EVER ;;,它允许你写for(EVER) { /* code */ })。我记得在 80 年代的 C 代码中看到了很多,在 90 年代早期的 C 和 C++ 代码中并不多,在过去的一两年里也很少见。 是的,我这么老了,但我猜你正在查看的代码编写者也很老

标签: c#


【解决方案1】:

这是一个infinite loop。就像你说的,它会一直运行,直到它的一部分中断(抛出异常或以其他方式存在循环)或机器用完支持循环的资源。

for (;;)
{
   //do stuff
} 

和以下一样:

do
{
   //do stuff
}while (true)

while(true)
{
   //do stuff
}

【讨论】:

  • 没有变量可以设置为null。参考the spec:第 1 部分和第 3 部分(“for_initializer”和“for_iterator”)是空语句,什么也不做。第 2 部分(“for_condition”)是一种特殊情况,其中指定缺少语句被视为条件已评估 true。
  • @Symon 需要明确的是,在我链接的上下文中,? 表示 C# 编译器用来解析 C# 源代码的 ANTLR 语法中的一个可选符号。这里没有 C# 变量。
  • @JoeSewell,啊。这更有意义。那一定是我对此感到困惑的地方。
  • @RufusL ,我明白了。阅读更多关于它的文档,我明白我错在哪里。感谢您清理它!
  • 当然,没问题。感谢您修复答案 +1
【解决方案2】:

for 循环的语法如下:

for (condition; test; action)

这些项目中的任何一项都可以省略(根据语言规范)。所以你得到的是一个无限循环。类似的方法:

while (true) { // do some stuff }

【讨论】:

  • 供参考,the C# draft specification on the for statement。请注意“如果 for_condition 不存在 或者如果评估结果为真,则控制转移到嵌入语句。” (强调我的)。
  • 调用第一个参数condition 是混乱的,第三个action 是模糊的; docs - for (initializer; condition; iterator) 的条款 - 讲述一个更好的故事。
  • @mklement0 我不记得为什么我把“条件”放在那里,所以我同意你的观点,但我放“行动”的原因是因为除了增加 a 之外,你还可以做其他事情变量。
  • 虽然在iterator 部分中可能做其他事情,但它的主要目的是迭代,所以我认为最好调用它iterator - 虽然可能添加一个 note 指出您在技术上不限于递增循环变量。
  • 您的链接中的什么地方说这是它的主要目的?
【解决方案3】:

for (;;)

简答:是一个无限循环,相当于while(true)

长答案:for (initializer; condition; iterator)Structure of the for statement

  • 初始化块:不要初始化变量。
  • 条件块:无条件(意味着无限执行)=> while true
  • 迭代器块:不对任何变量进行操作(无迭代器)

for(;;) example from official documentation

【讨论】:

    【解决方案4】:

    这种类型的 for 循环是一个无限循环。它相当于while(true){stuff to be executed...}。它继续运行,直到遇到中断、返回或转到循环外的标签。

    for 循环由三个部分组成,初始化、条件和循环后要执行的块。如果没有要测试的条件,循环将继续进行。

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多