Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

goto statement in C#

Tags:

c#

goto

I'm writing a function like in C#:

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

          Console.WriteLine("hello " + 1);

          out1:
             string hello = "";
       }
}

This basically counts the number and if the i is greater than 20 it should not write to console.writeline. it should step over and hit "out1" but the "out1" needs to have a function in the end to compile. It needs to have "string hello = """ to compile. I don't need the "string hello = """. I just want it to do nothing and got the end of the loop. Is there a way to do this without the "string hello = """ that the out1: statement needs? Like:

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

          Console.WriteLine("hello " + 1);

          out1:
       }
}

Thanks.

like image 803
iefpw Avatar asked Dec 05 '11 21:12

iefpw


3 Answers

Though it is absolutely correct to say that there are better ways to solve this problem than to use goto, I note that no one has actually answered your question.

A label must label a statement. You want to go to a location that has no statement associated with it. You can either make an empty statement with a single semicolon, or an empty block.

    out1:
    ;
} 

or

    out1:
    {}
}

But like they say, don't go there in the first place if you can avoid it.

like image 98
Eric Lippert Avatar answered Sep 28 '22 11:09

Eric Lippert


This loop could easily be written many other ways - you could just loop while i<=20 instead of i<40 (best), or move the Console.WriteLine call into the if statement with the if inverted.

However, I'm assuming you're trying to work with a more elaborate scenario in your "real" case. If that's the case, instead of using goto, just use continue to skip the rest of the loop:

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);
   }
}

Similarly, you can use break to completely break out of the loop and not process more elements, if that's more appropriate in your real case.

like image 33
Reed Copsey Avatar answered Sep 28 '22 09:09

Reed Copsey


Just invert your condition - also if...else might be an alternative. I assume there is other code otherwise you can just change the for loop itself to just count up to 20.

   for(int i = 0; i < 40; i++) 
   {
      if(i <= 20) 
      {
          Console.WriteLine("hello " + 1);
      }
      //other code
   }
like image 34
BrokenGlass Avatar answered Sep 28 '22 09:09

BrokenGlass