web-dev-qa-db-ja.com

enumでswitchステートメントを効率的に使用するにはどうすればよいですか?

次のシナリオでswitch値を含むenumステートメントを使用する方法を教えてください。

フライト予約システムの小さなプログラムを作っています。プログラムは、乗客に関する特定の詳細を入力するためのものです。このプログラムでは、ユーザーが次の3つの宛先以外の宛先を選択することも制限されています。目的地を選択すると、フライト番号が自動的に割り当てられるようになります。ユーザーは3つの目的地の1つを選択し、プログラムは乗客に適切なフライト番号を割り当てます。

フライト番号は次のように割り当てられます。

     Destination                    Flight No.
      London                            201
      Frankfurt                         233
      Berlin                            241

それでは、宛先のenumを作成するとします。ここで、switchステートメントをどのように使用できますか?これは宿題ではありません。探検のためだけにやっています。

6
Maxood

あなたのシナリオは、列挙の適切な使用のようには聞こえません。また、値が決して変更されない限り、これはデータ駆動型である必要があります。

値が変更されない場合は、目的地がキーでフライト番号が値である場合、Key-Valueペアがより適切です。これにより、キーを使用して値を直接かつ効率的に特定できるため、switchステートメントが不要になります。

本当に列挙型を使用したい場合、C#のswitchステートメントは次のようになります。

int flightNumber;
Destination selection = // some value collected from user input;

switch( selection )
{
    case Destination.London:
        flightNumber = 201;
    break;

    // etc.
}
11
Tim Medora

私はTim Medoraに同意します。その場合、enumを使用することは適切なアイデアではありません。目的地とフライト番号をハードコードする必要があるためです。

私があなたに勧めるのは、可能な目的地を用意することですList<string>および目的地とフライト番号の間のマッピング、例:Dictionnary<string,int>データベースの内容に応じて、プログラムの開始時に動的に生成します。

6
SRKX

これは典型的なハッシュテーブルですよね。

  1. エントリの数が多い場合、ハッシュテーブルを使用する方がはるかに効率的です。
  2. Enum-switch実装よりも、データの取得、格納、および変更に関する操作を実装する方が簡単です。
  3. コードを維持する方が簡単です。 enumおよびswitchステートメントで数十の宛先を定義していると、恐ろしいことになります。
1
james