Rozgałęzianie funkcji switch case

Rozgałęzianie funkcji switch case
Bjorn Nożycoręki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
  • Postów: 13
0

Siemka!

Chcę utworzyć własny mały projekcik konsolowy w C# i chcę wykorzystać funkcję switch/case, ale w dość nietypowy sposób.. Otóż chcę aby wybierano case 1, otwierało kolejne case do wyboru, które były by właśnie w tym wybranym case 1, czy jest opcja wykonania czegoś takiego? Grzebać w środku switcha, czy poza?

W skrócie : Odpalam program, wyskakuje mi 5 opcji do wybrania, klikam pierwszą i wyskakuje mi np. kolejne 3 opcje do wybrania..

YO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 540
0

Zagnieżdżony Switch

Kopiuj
switch(zmienna)
    {
        case 1:
            switch(zmienna2)
            {
                case 1:
                    break;
            }
        break;
    }
}
koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli można, to pytanie na marginesie -- czy w C# nie ma elegantszych i czytelniejszych (niż case) metod rozgałęziania sterowania -- w stylu map/słowników/tablic asocjacyjnych, w których wartościami są funkcje/funktory?

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
6

Oczywiście, że są słowniki (Dictionary<>). Zagnieżdżony switch to pierwszy krok do katastrofy. Przecież można ładniej:

Kopiuj
switch(selection)
{
    case 1: 
        ShowOption1();
        break;

    case 1: 
        ShowOption2();
        break;
}

Itd. Porozwalaj to na metody albo na nawet na klasy.

Aventus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UK
  • Postów: 2235
3

Nie wiem czy to satysfakcjonująca odpowiedź (zapewne chociaż częściowa). W C# jest już pattern matching więc można robić "mądrzejsze switche".

Kopiuj
option switch
{
  OptionA a when a.Value > 10 => FurtherSwitch(a),
  OptionA a when a.Value < 5 => FurtherSwitchWithLess(a),
  OptionA a => FurtherSwitchDefault(a),
  OptionB b => FurtherSwtich(b),
  OptionC c => FurtherSwitch(c),
  _ => HandleDefault()
}

SomeResult FurtherSwtich(OptionA a)
  => a switch
  {
    a.Something > ...,
    ...
  }

// itd...

Dodatkowo można użyć value tuples do jeszcze bardziej rozbudowanych porównań:

Kopiuj
(optionOne.SomeValue, optionTwo.SomeValue) switch
{
  (1, 10) => Something(),
  (11, 20) => SomethingElse(),
  ...
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.