簡體   English   中英

C#中的goto語句

[英]goto statement in C#

我正在寫一個像C#一樣的函數:

public void CountNumber() 
{
       for(int i = 0; i < 40; i++) {
          if(i > 20) {
               goto out1;
          }

          Console.WriteLine("hello " + 1);

          out1:
             string hello = "";
       }
}

這基本上計算數字,如果i大於20,則不應寫入console.writeline。 它應該跳過並點擊“out1”但是“out1”最終需要有一個函數來編譯。 它需要有“string hello =”“”來編譯。 我不需要“string hello =”“”。 我只是希望它什么也不做,並且循環結束了。 如果沒有out1:語句需要的“string hello =”“”,有沒有辦法做到這一點? 喜歡:

public void CountNumber() 
{
       for(int i = 0; i < 40; i++) {
          if(i > 20) {
               goto out1;
          }

          Console.WriteLine("hello " + 1);

          out1:
       }
}

謝謝。

盡管說使用goto有更好的方法來解決這個問題是絕對正確的,但我注意到沒有人真正回答過你的問題。

標簽必須標記聲明 您想要轉到沒有與之關聯的語句的位置。 您可以使用單個分號或空塊創建空語句。

    out1:
    ;
} 

要么

    out1:
    {}
}

但就像他們說的那樣,如果你能避免它,就不要去那里。

這個循環可以很容易地用很多其他方式編寫 - 你可以在i<=20而不是i<40 (最好)的情況下循環,或者將Console.WriteLine調用移動到if語句中並使用if反轉。

但是,我假設您正試圖在“真實”案例中使用更精細的場景。 如果是這種情況,而不是使用goto ,只需使用continue跳過循環的其余部分:

public void CountNumber() 
{
   for(int i = 0; i < 40; i++) {
      if(i > 20) {
         continue; // Skips the rest of this loop iteration
      }

      Console.WriteLine("hello " + 1);
   }
}

類似地,如果在您的實際情況中更合適,您可以使用break來完全擺脫循環而不處理更多元素。

只是顛倒你的情況 - if...else可能是另一種選擇。 我假設還有其他代碼,否則你可以將for循環本身更改for最多20個。

   for(int i = 0; i < 40; i++) 
   {
      if(i <= 20) 
      {
          Console.WriteLine("hello " + 1);
      }
      //other code
   }

還有一些其他類似goto的語句,你應該考慮使用:

  • continue進入當前循環的下一次迭代。
  • break離開當前循環
  • return退出當前方法

如果以上都不符合您的要求,您應該只考慮goto 根據我的經驗,這種情況很少發生。

看起來你想在這里continue使用。

您可以使用continue關鍵字:

public void CountNumber()  {
  for(int i = 0; i < 40; i++) {
    if(i > 20) {
      continue;
    }
    Console.WriteLine("hello " + 1);
  }
}

但是,請考慮使用if代替:

public void CountNumber()  {
  for(int i = 0; i < 40; i++) {
    if(i <= 20) {
      Console.WriteLine("hello " + 1);
    }
  }
}
public void CountNumber() 
{
       for(int i = 0; i < 40; i++) {
          if(i > 20) {
              continue;
          }

          Console.WriteLine("hello " + 1);

       }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM