【解決方法】(ネストされた) スイッチケース C# の交換

プログラミングQA


1 つのインターフェイス、インターフェイスを実装する抽象クラス、および抽象クラスを継承してメソッドの 1 つをオーバーライドする 2 つの (男性と女性) クラスがあります。 主に、人を女性または男性にする場合 (例: IPerson p1 = new Female();)。 そして、コンソールアプリメニューが必要です。(ネストされた)スイッチケースを使用しましたが、可読性が低いため、別の解決策を探しています。助けてください。申し訳ありませんが、C#は初めてです..コードは以下のとおりです…

私が試したこと:

C#
IPerson p1 = new Female();

            byte choice, choice1, choice2;
            DisplayMenu();
            choice = byte.Parse(ReadLine());
            Clear();


            while (choice != 4)
            {
                

                switch (choice)
                {
                    case 1:
                        f1.LiftLeg();
                        Thread.Sleep(1000);
                        Write("Press 1 to lover a leg: ");
                        choice1 = byte.Parse(ReadLine());

                        switch (choice1)
                        {
                            case 1:
                                f1.LowerLeg();
                                Thread.Sleep(2000);
                                Clear();
                                break;

                        }
                        break;           
                    case 2:
                        f1.LiftArm();
                        Write("Press 1 to lower arm: ");
                        choice2 = byte.Parse(ReadLine());
                        switch (choice2)
                        {
                            case 1:
                                f1.LowerArm();
                                Thread.Sleep(2000);
                                Clear();
                                break;
                            default:
                                WriteLine("Invalid input.");
                                break;
                        }
                        
                    case 3:
                        f1.Pee();
                        break;

                    default:

                        WriteLine("You entered " + choice + " please only use numbers from 1 to 4.");
                        
                        break;

                }

解決策 1

簡単な方法は、コードを (外側のスイッチ) ケースの専用メソッドに移動することです。

C#
switch (choice)
{
case 1:
  ProcessLiftLeg(f1);
  break; 
//..

C#
ProcessLiftLeg(F f) //'F', because, in your code, there is no hint about 'f1' type
{
  f.LiftLeg();
  Thread.Sleep(1000);
  Write("Press 1 to lover a leg: ");
  var choice = byte.Parse(ReadLine());
  if ( choice == 1)
  {
     f.LowerLeg();
     Thread.Sleep(2000);
     Clear();
  }
}

注意してください、あなたの while 同じものを無期限に繰り返す choice 価値。

解決策 2

まず、 while ループが閉じられていないため、何かが欠落している必要があり、閉じられていたとしても何も変わらない 選択 だから無限です。 また、ケース 2 には、最初のスイッチ ケースのブレークがありません。 それで、それらがそこにあると仮定しましょう。

読みやすさを求めている場合は、定数を使用することをお勧めします 選択 ケース値。 これにより、コードを読んでそれぞれが何をするかを確認する必要がなくなり、すぐに認識できるようになります。 内側のスイッチ (選択1) は、スイッチの代わりに if ステートメントを使用する方が適切です。 これにより、選択の線引きがあり、内側と外側が異なることがわかります。

そうでなければ、明らかに読めないものは他にありません。

コメント

タイトルとURLをコピーしました