• Victor@lemmy.world
      link
      fedilink
      arrow-up
      4
      ·
      4 days ago

      Is “case expr:” really a label? You could put anything in there, like “case 42:”. I don’t see a label, but maybe I don’t know what a label is in C.

      • TwilightKiddy@scribe.disroot.org
        link
        fedilink
        English
        arrow-up
        1
        ·
        4 days ago

        In C# it’s certainly a label, it’s the same syntax and you can also jump to them with goto, which is actually very convenient sometimes. As far as I know this is an ancient feature and seeing how early C# was mostly inspired by C, I would expect it to behave the same way there.

        • Victor@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          3 days ago

          What?

          If I have a case 42: in C#, I can issue a goto 42 and resume execution after that case? Or how would that work?

          From what I know, labels are only an identifier followed by a colon, like:

          stop: printf("stopped.\n");
          

          Or just the label and colon on one line and statements following on subsequent lines. I’ve never seen a switch case expression being called a “label”. Very new to me. Would love to see a minimal demonstration example. 🙏

          Edit: huh, I guess you can.

          • TwilightKiddy@scribe.disroot.org
            link
            fedilink
            English
            arrow-up
            3
            ·
            3 days ago

            Yes, you would do goto case 42;
            From MSDN:

            private static decimal CalculatePrice(CoffeeChoice choice)
            {
                decimal price = 0;
                switch (choice)
                {
                    case CoffeeChoice.Plain:
                        price += 10.0m;
                        break;
            
                    case CoffeeChoice.WithMilk:
                        price += 5.0m;
                        goto case CoffeeChoice.Plain;
            
                    case CoffeeChoice.WithIceCream:
                        price += 7.0m;
                        goto case CoffeeChoice.Plain;
                }
                return price;
            }