GOTO 在 C# 中是如何工作的

how GOTO works in c#

我在 c# winform 中有一个 for 循环,如果 i=7

我想再次开始 for 循环

代码如下所示:

 for (int i = 0; i < 10; i++)
        {
           if (i==7)
             {
               MessageBox.Show("you must start for loop again ");
              //here I want to go back to for loop again
             }
        }  

有什么想法吗?

另外,我知道这段代码没有意义,我只是写了它作为例子 — 我在我的 c# 代码中有类似的情况。

在这种情况下,只需将 i 变回 0,如下所示:

for (int i = 0; i < 10; i++)
{
    if (i==7)
    {
        MessageBox.Show("you must start for loop again ");
        i = 0;
    }
}

如果你真的想使用goto,那么这里有一个例子:

BackToTheStart:
  for (int i = 0; i < 10; i++)
  {
      if (i==7)
      {
          MessageBox.Show("you must start for loop again ");
          goto BackToTheStart;
      }
  }

如果您还不知道,请记住,goto 通常被认为是不好的做法,是 C# 从昔日的 C 风格语言中带来的不受欢迎的遗留包袱。在大多数情况下你不需要它,就像在这个例子中,不使用它更容易。而且,最重要的是,没有人会感谢您添加 goto.

值得注意的是,这将是一个无限循环。想一想:如果每次 i 达到 7 时都回到 0,那么它怎么会赌 i == 10 的情况呢?你会如何跳出循环?这可能是 XY problem 的情况 - 即您可能 实际上 不想做您在这里说您想做的事情。

如果您真的希望它发生在无限循环中,只需这样做:

while (true) {
   for (int i = 0; i <= 7; i++) {
       if (i == 7) {
           // ..
       }
    }
 }

实际上,如果您只是在 i = 7 的情况下做某事,我有点困惑为什么在这种情况下您根本不用 "for" 循环;为什么要费心使用 for 循环,而只是将操作置于无限循环中?

此外,如果您在 UI 线程上执行此操作,它会出现在 "hang" 和 UI 中,因为 UI 线程永远不会除了为您的 for 循环提供服务之外,能够做任何事情。用户甚至无法正常关闭它。

最后,正如其他人指出的那样,从不 使用 goto,这是一种不好的做法 - Microsoft 甚至不应该将其包含在语言中。