2012-03-18 7 views
3

これについては、私のシナリオでは1つから5つのオプションを選択するオプションがあります。複数のIF文を処理するためのベストな使用

オプション2と3が選択されていると言って、私はそれが選択されたときなどにIF文を書くことができますが、問題はすべての可能な組み合わせに対してIF文を書きたくありません。

これについて最も簡単な方法はなんですか?

私はスイッチに行くことができますが、それは再びそれぞれの組み合わせをプログラミングすることになります。

ありがとうございました。

編集:コードの小さな例えば

bool Option1 = false; 
bool Option2 = false; 
bool Option3 = false; 

if (Option1 == true && Option2 == false && Option3 == false) 
{ 
//Do Somthing 
} 
else if (Option1 == true && Option2 == true && Option3 == false) 
{ 
//Do Somthing 
} 
else if (Option1 == true && Option2 == false && Option3 == true) 
{ 
//Do Somthing 
} 

などなど...

+2

コードの例を投稿して、何が起こっているのかを知ることができますか? –

+0

@AshleyDaviesさんがいくつか追加しました – supergeek1982

+0

このような状況で私は理解しやすい言語でコードを書いています。 Option1 Option2は決して私のための変数名の選択肢ではありません、あるいは、私は彼らが意図しているものを説明する名前をいくつか作成します。 使用した変数に関する詳細情報を提供できる場合は、私は最高のコードを書いて良いコードを嫌にすることができます。 –

答えて

4

は、それが実際に何をするか"// Do Somthing"に依存します。

オプション間にコードの重複がある場合は、それを関数に入れて呼び出します。または、複製されたコードをスタンドアロンのブロックif (Option1) { ... }に分割します。

あなたが言及したように、有効な組み合わせを列挙型(5ビットは32個の値)に変えてswitch文に入れることができます。

+1

私はEnums ..を忘れてしまいました。トリックを行うだろうありがとうトム ' – supergeek1982

+0

+1列挙型をビットフィールドとして考える –

4

もし私がネストされているなら、私は行くだろう。

if(option1) 
{ 
    if (option2) 
    { 
     if (option3) 
     { 
     doThing2(); 
     } 
     else 
     { 
     doThing1(); // no more alternatives 
     } 
    } 
    else 
    { 
     doThing1(); // need to do the same as above 
    } 
} 
else 
{ 
    ... more or less the same as above 
} 

私はそれが意図された方法だと思います。そして、それが読みやすいとなり素敵なエディタ...

HTH

MNario

3

でそれが密接にあなたがモデル化しようとしているロジックに関連付けられていますので、あなたのコードを書くようにしてください。 option1の選択肢は、他のオプションの意味を変更するのか、それともすべてをグループとして扱うのでしょうか?

分岐で使用できる他のフラグ(例:exactlyTwoOptionsSelected)を紹介すると便利です。

ところで、if (option1 && option2)またはif (!option1 || option2)などの書き込みはif (option1 == true && option2 == true)if(option1 == false || option2 == true)より簡単になります。

関連する問題