• Victor@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    6 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
      ·
      6 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
        5 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
          ·
          5 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;
          }