2016-11-24 4 views
1

複数のif文(以下の例のような)をよりコンパクトなコードに変換する際に問題があります。私はテーブルや多次元配列については考えていますが、もっと良い解決策を知っているかもしれません。私は約30のif文を自分のコードに持っており、そのコードを簡単に素早くよりコンパクトに変換するために明確なパターンはありません。複数のif文を置き換えるにはどうすればよいのですか?

これを改善するにはどうすればよいですか?

if (D == 0.25) 
{ 
    if (threadPerInch == 20) 
    { 
     le = 0.22; 
    } 
    else if (threadPerInch == 28) 
    { 
     le = 0.25; 
    } 
    else if (threadPerInch == 32) 
    { 
     le = 0.28; 
    } 
    else 
    { 

    } 
} 
+1

あなたはスイッチ-case文を使用することができます。 –

+11

ディクショナリ leとthreadPerInchのすべての値を格納する場所 – Steve

+0

'Switch'ステートメントへの切り替え –

答えて

4

等価性のみをチェックするので、本質的にこのルックアップを直接行うことができる辞書を使用する必要があります。そのために、threadPerInchからleまでのneマッピングをどこかの辞書として定義します。クラスのメンバーとして:

Dictionary<int, double> leForThreadPerInch = new Dictionary<int, double>() { 
    [20] = 0.22, 
    [28] = 0.25, 
    [32] = 0.28 
}; 

そして、あなただけのle値を得るためにそれから値を取得しようとすることができます

if (D == 0.25) 
{ 
    if (!leForThreadPerInch.TryGetValue(threadPerInch, out le)) 
    { 
     // else case 
    } 
} 
1

Switchステートメントを使用してください。

switch (threadPerInch) 
{ 
    case 20: 
     le = 0.22; 
     break; 
    case 28: 
     le = 0.25; 
     break; 
    case 32: 
     le = 0.28; 
     break; 
} 

それともDictionary

Dictionary<int, decimal> threads = new Dictionary<int, decimal>() 
{ 
    {20, 0.22m}, 
    {28, 0.25m}, 
    {32, 0.28m} 
}; 

if (D == 0.25 && threads.ContainsKey(threadPerInch)) 
{ 
    le = threads[threadPerInch]; 
} 
-1

はい、任意の言語の非常に基本的な要素はswitch-caseキーワードです。あなたは(必要ありません)ストアthreadPerInchは別の変数では、このようにスイッチを使用することができます。

ushort tpi = threadPerInch; //I suppose ushort, since its 20-32 
switch(tpi) 
{ 
    case 20: le = 0.22; break; 
    case 28: le = 0.25; break; 
    case 32: le = 0.28; break; 
} 

は常に文の後break;を使用してください。さらに制御するには、default:キーワードを使用します。このキーワードは、いずれのケースも正しくない場合にトリガーされます。

+2

* "別の変数にthreadPerInchを格​​納する必要があります" * - なぜですか? – poke

+0

よく、__should__ではありませんが、それは私がやることであり、それは私の意見ではっきりしています。 – devRicher

+0

明確な名前( 'tpi')を持たない新しい変数を導入すると何がより明確になりますか?変数は前に既に存在していて、非常に明確な名前を持っているので、あなたが何を切り替えているのか正確に知ることができます。 – poke

0

あなたはこの

Dictionary<int, double> dict = new Dictionary<int, double>(); 
    dict.Add(20, 0.22); 
    dict.Add(28, 0.25); 
    dict.Add(32, 0.28); 

    le = dict[threadPerInch]; 
-2
ような何かを行うことができます

これらがif else文のハードコードされた値であれば、Tuple/Dictionaryを使用してデータを入れて値を取り出すことができます。

タプルの使用例は以下のとおりです。

var population = new Tuple<string, int, int, int, int, int, int>(
          "New York", 7891957, 7781984, 
          7894862, 7071639, 7322564, 8008278); 
// Display the first and last elements. 
Console.WriteLine("Population of {0} in 2000: {1:N0}", 
        population.Item1, population.Item7); 
// The example displays the following output: 
//  Population of New York in 2000: 8,008,278 

おかげ

+0

皆さんからの素晴らしい提案 - ありがとうございます。私はすべてのオプションを試してみます。 – Thomas

関連する問題