Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. OMG a "Goto"

OMG a "Goto"

Scheduled Pinned Locked Moved The Weird and The Wonderful
asp-netcomhelpquestion
42 Posts 21 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C CARPETBURNER

    protected void Page_Load(object sender, EventArgs e)
    {
    string str = "Even exception occur again in catch block still finally block is Working";
    try
    {
    throw new IndexOutOfRangeException();
    }
    catch
    {
    goto Hello;
    throw new IndexOutOfRangeException();

    }
    finally
    {
    Response.Redirect("Error.aspx?str="+ str);
    }
    Hello:
    Response.Write("Finally Skiped!");
    }

    http://www.codeproject.com/KB/aspnet/DotNetBulletQuestions.aspx?msg=2764693#xx2764693xx[^] A goto in a try/catch/finally block... urrrghh!

    P Offline
    P Offline
    PIEBALDconsult
    wrote on last edited by
    #7

    That code was written simply to make a point, it's not "real" code, so it doesn't qualify as a Coding Horror.

    1 Reply Last reply
    0
    • B BadKarma

      CPallini wrote:

      BTW I didn't know C# has goto statement, is there a reason to have it in such a language?

      A reason ? Maybe no, but you could need one if you use a switch.

      switch(iData)
      {
      case 0:
      case 1:
       // do stuff for 0 and 1
       break;
      case 2:
       // do stuff for 2
       goto 3;
      case 3:
       // do stuff for 2 and 3
       break;
      }
      

      Learn from the mistakes of others, you may not live long enough to make them all yourself.

      M Offline
      M Offline
      MidwestLimey
      wrote on last edited by
      #8

      Yeah, the poor mans drop through.

      Bar fomos edo pariyart gedeem, agreo eo dranem abal edyero eyrem kalm kareore

      1 Reply Last reply
      0
      • B BadKarma

        CPallini wrote:

        BTW I didn't know C# has goto statement, is there a reason to have it in such a language?

        A reason ? Maybe no, but you could need one if you use a switch.

        switch(iData)
        {
        case 0:
        case 1:
         // do stuff for 0 and 1
         break;
        case 2:
         // do stuff for 2
         goto 3;
        case 3:
         // do stuff for 2 and 3
         break;
        }
        

        Learn from the mistakes of others, you may not live long enough to make them all yourself.

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #9

        o really ?? i think it can be used like this : switch(iData) { case 0: case 1: // do stuff for 0 and 1 break; case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break; } if the break statement is missing, it go through next case ..

        VirtualVoid**.NET**

        C 1 Reply Last reply
        0
        • L Lost User

          o really ?? i think it can be used like this : switch(iData) { case 0: case 1: // do stuff for 0 and 1 break; case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break; } if the break statement is missing, it go through next case ..

          VirtualVoid**.NET**

          C Offline
          C Offline
          CPallini
          wrote on last edited by
          #10

          It is NOT C/C++, my friend, it is C# ;P

          Juraj Suchan wrote:

          case 0: case 1: // do stuff for 0 and 1 break;

          Fine: It is allowed.

          Juraj Suchan wrote:

          case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break;

          That's not allowed in C# (well, in fact, it is allowed as it stands, with just comments :-D ). :)

          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
          [My articles]

          L 1 Reply Last reply
          0
          • C CPallini

            It is NOT C/C++, my friend, it is C# ;P

            Juraj Suchan wrote:

            case 0: case 1: // do stuff for 0 and 1 break;

            Fine: It is allowed.

            Juraj Suchan wrote:

            case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break;

            That's not allowed in C# (well, in fact, it is allowed as it stands, with just comments :-D ). :)

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #11

            ou .. am I blind? :) sorry

            VirtualVoid**.NET**

            J 1 Reply Last reply
            0
            • C CPallini

              My 5, that code is pure Horror. Anyway (I made a test) the goto statement it is ininfluent. BTW I didn't know C# has goto statement, is there a reason to have it in such a language? :)

              If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
              This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
              [My articles]

              S Offline
              S Offline
              Super Lloyd
              wrote on last edited by
              #12

              I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

              A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

              C T P A T 5 Replies Last reply
              0
              • S Super Lloyd

                I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

                A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                C Offline
                C Offline
                CPallini
                wrote on last edited by
                #13

                You may throw an exception for that. :)

                If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                [My articles]

                R J 2 Replies Last reply
                0
                • S Super Lloyd

                  I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

                  A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                  T Offline
                  T Offline
                  Thomas Weller 0
                  wrote on last edited by
                  #14

                  A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

                  S R 2 Replies Last reply
                  0
                  • T Thomas Weller 0

                    A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

                    S Offline
                    S Offline
                    Super Lloyd
                    wrote on last edited by
                    #15

                    break will only break the inner most loop! C# is not java where you could have labelled loop...

                    A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                    T 1 Reply Last reply
                    0
                    • C CPallini

                      You may throw an exception for that. :)

                      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                      [My articles]

                      R Offline
                      R Offline
                      Rob Grainger
                      wrote on last edited by
                      #16

                      That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                      C A 2 Replies Last reply
                      0
                      • T Thomas Weller 0

                        A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

                        R Offline
                        R Offline
                        Rob Grainger
                        wrote on last edited by
                        #17

                        Thomas Weller wrote:

                        A simple 'break' would do the job, no need for 'goto'...

                        Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                        outer_loop:
                        while (true) {
                        // .. do something
                        inner_loop:
                        while (true) {
                        // ...
                        if (condition1)
                        break inner_loop;

                                if (condition2)
                                    break outer\_loop;
                            }
                        }
                        

                        Given that and fall-through in switch..case I see no need for goto.

                        C T 2 Replies Last reply
                        0
                        • R Rob Grainger

                          That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                          C Offline
                          C Offline
                          CPallini
                          wrote on last edited by
                          #18

                          Rob Grainger wrote:

                          not used as an alternative control flow mechanism.

                          That's exactly what they are (IMHO). :-D

                          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                          [My articles]

                          R 1 Reply Last reply
                          0
                          • R Rob Grainger

                            Thomas Weller wrote:

                            A simple 'break' would do the job, no need for 'goto'...

                            Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                            outer_loop:
                            while (true) {
                            // .. do something
                            inner_loop:
                            while (true) {
                            // ...
                            if (condition1)
                            break inner_loop;

                                    if (condition2)
                                        break outer\_loop;
                                }
                            }
                            

                            Given that and fall-through in switch..case I see no need for goto.

                            C Offline
                            C Offline
                            CPallini
                            wrote on last edited by
                            #19

                            A 'labelled break' is a 'goto' alias. :)

                            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                            [My articles]

                            1 Reply Last reply
                            0
                            • R Rob Grainger

                              Thomas Weller wrote:

                              A simple 'break' would do the job, no need for 'goto'...

                              Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                              outer_loop:
                              while (true) {
                              // .. do something
                              inner_loop:
                              while (true) {
                              // ...
                              if (condition1)
                              break inner_loop;

                                      if (condition2)
                                          break outer\_loop;
                                  }
                              }
                              

                              Given that and fall-through in switch..case I see no need for goto.

                              T Offline
                              T Offline
                              Thomas Weller 0
                              wrote on last edited by
                              #20

                              What I mean is: a 'break' would be enough to execute the 'beep bop a loola' :-D ... By the way: I'd consider a 'flag' much better than a 'goto'... Regards Thomas

                              R 1 Reply Last reply
                              0
                              • S Super Lloyd

                                break will only break the inner most loop! C# is not java where you could have labelled loop...

                                A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                                T Offline
                                T Offline
                                Thomas Weller 0
                                wrote on last edited by
                                #21

                                I know. But in the pseudocode above it will definitely execute the 'beep bop a loola'... :-D Regards Thomas

                                J 1 Reply Last reply
                                0
                                • S Super Lloyd

                                  I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

                                  A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                                  P Offline
                                  P Offline
                                  PIEBALDconsult
                                  wrote on last edited by
                                  #22

                                  Add && !foo to the for loop conditions and/or use while instead.

                                  1 Reply Last reply
                                  0
                                  • R Rob Grainger

                                    That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                                    A Offline
                                    A Offline
                                    Andrew Rissing
                                    wrote on last edited by
                                    #23

                                    I take exception to that remark! *Bypasses his finally block due to a goto statement*

                                    1 Reply Last reply
                                    0
                                    • C CARPETBURNER

                                      protected void Page_Load(object sender, EventArgs e)
                                      {
                                      string str = "Even exception occur again in catch block still finally block is Working";
                                      try
                                      {
                                      throw new IndexOutOfRangeException();
                                      }
                                      catch
                                      {
                                      goto Hello;
                                      throw new IndexOutOfRangeException();

                                      }
                                      finally
                                      {
                                      Response.Redirect("Error.aspx?str="+ str);
                                      }
                                      Hello:
                                      Response.Write("Finally Skiped!");
                                      }

                                      http://www.codeproject.com/KB/aspnet/DotNetBulletQuestions.aspx?msg=2764693#xx2764693xx[^] A goto in a try/catch/finally block... urrrghh!

                                      A Offline
                                      A Offline
                                      Andrew Rissing
                                      wrote on last edited by
                                      #24

                                      Maybe someone was just trying to test something and forgot to yank out the code? One can dream right....

                                      P 1 Reply Last reply
                                      0
                                      • C CARPETBURNER

                                        protected void Page_Load(object sender, EventArgs e)
                                        {
                                        string str = "Even exception occur again in catch block still finally block is Working";
                                        try
                                        {
                                        throw new IndexOutOfRangeException();
                                        }
                                        catch
                                        {
                                        goto Hello;
                                        throw new IndexOutOfRangeException();

                                        }
                                        finally
                                        {
                                        Response.Redirect("Error.aspx?str="+ str);
                                        }
                                        Hello:
                                        Response.Write("Finally Skiped!");
                                        }

                                        http://www.codeproject.com/KB/aspnet/DotNetBulletQuestions.aspx?msg=2764693#xx2764693xx[^] A goto in a try/catch/finally block... urrrghh!

                                        P Offline
                                        P Offline
                                        Paul Conrad
                                        wrote on last edited by
                                        #25

                                        :wtf:

                                        "The clue train passed his station without stopping." - John Simmons / outlaw programmer "Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon "Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham

                                        1 Reply Last reply
                                        0
                                        • A Andrew Rissing

                                          Maybe someone was just trying to test something and forgot to yank out the code? One can dream right....

                                          P Offline
                                          P Offline
                                          PIEBALDconsult
                                          wrote on last edited by
                                          #26

                                          (You need to follow the link.)

                                          A 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups