Rozgałęzianie funkcji switch case

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..

0

Zagnieżdżony Switch

switch(zmienna)
    {
        case 1:
            switch(zmienna2)
            {
                case 1:
                    break;
            }
        break;
    }
}
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?

6

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

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

    case 1: 
        ShowOption2();
        break;
}

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

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".

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ń:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1