2017-05-26 5 views
0

標準辞書は次のようになります。これらのすべては、このブール値との一致があるかどう今、私は値をチェックし、DictionaryInitと呼ばれるクラスであり、ATに至るまでC#複数の辞書をどのようにループしますか?

 public Dictionary<int, DictionarySetup> H = new Dictionary<int, DictionarySetup>() 
     { 
      {18000, new DictionarySetup { Some values }}, 
     }; 

public Boolean Dictionary_Test(Dictionary<int, DictionarySetup> AccountLexicon) 
    { 
     DictionarySetup ClassValues; 
     if (AccountLexicon.TryGetValue(MapKey, out ClassValues)) 
     { 
      return true; 
     } 
     return false; 
    } 

私は、各辞書をループするより効率的な方法を探しています。一致するものがある場合は、その特定の辞書を後続の方法で使用するようにします。これはif/elseのようになります。

  if(Dictionary_Test(theDictionary.C) == true) 
      { 
       Dictionary_Find(Account_String, rowindex, theBSDictionary.C, Cash_Value, txtCurrency.Text); 
      } 
      else if (Dictionary_Test(theDictionary.D) == true) 
      { 
       Dictionary_Find(Account_String, rowindex, theDictionary.D, Cash_Value, txtCurrency.Text); //Method that makes use of the dictionary values, above dictionary checks only if it exists 
      } 

A-Tの辞書があれば、それはif/else'sの多くです!これを行うより良い方法はありますか?私は辞書の配列に辞書を追加して、同じトピックに言及しているスレッドを見つけましたが、それをループしていますが、一致するものが見つかった場合はどのように一致する辞書の名前を取得しますか、一致する辞書を使用しますか?

+0

dictionary_A-Tを持っているのではなく、辞書のリストを持っているのはなぜですか? – Rob

答えて

0
// put dictionary A ~ T to a list of dictionary 
List<Dictionary<int, DictionarySetup>> dictionaries = new List<Dictionary<int, DictionarySetup>>{A,B,C, ... , T}; // Replace ... with D,E,F, etc. until T 
// iterate each dictionary and if found, exit the loop 
foreach(var dict in dictionaries) 
{ 
    if(Dictionary_Test(dict)) 
    { 
     Dictionary_Find(Account_String, rowindex, dict, Cash_Value, txtCurrency.Text); 
     break; 
    } 
} 
1

もう1つの可能な解決策は、DictionaryInitクラスから-Tから各辞書を取得するためにリフレクションを使用することができます。値A〜Tを含む配列を作成し、配列をループしてリフレクションを使用して辞書を取得し、その辞書をテストします。一致するものがあればその辞書を返してループを終了します。私はちょうどすぐに私がやったプロジェクトからいくつかのコードをつかんで、合わせてそれを変更し、それをテストしていませんしました

var dicts = new[]{"A", "B", ......., "T"} 

foreach (var dict in dicts) 
{ 
    var found = CheckDictionary(theDictionary, dict); 
    if (found != null) 
    { 
     Dictionary_Find(Account_String, rowindex, (Dictionary<int, DictionarySetup>)found, Cash_Value, txtCurrency.Text); 
     break; 
    } 
} 

public static object CheckDictionary(object dictClass, string dictName) 
{ 
    var theDictionary = dictClass.GetType().GetProperty(dictName).GetValue(dictClass, null); 
    return Dictionary_Test(theDictionary) ? theDictionary : null; 
} 

:のようなもの。いくつかの調整が必要かもしれないが、うまくいけばあなたを近づけることができます!

関連する問題