/ / C # Jak przeglądać różne słowniki? - c #, pętle, słownik

C # Jak przeglądasz wiele słowników? - c #, pętle, słownik

Słownik standardowy wyglądałby tak:

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

Począwszy od A-T, wszystkie są w klasie o nazwie DictionaryInit, teraz sprawdzam wartość, jeśli istnieje zgodność z tym logicznym:

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

Teraz szukam bardziej wydajnej metodyprzeglądaj każdy słownik i, jeśli istnieje dopasowanie, pobierz ten konkretny słownik do użycia w kolejnej metodzie, tak wygląda teraz w 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
}

W przypadku słowników od A-T byłoby to bardzo przydatneif / else! s. Czy istnieje lepszy sposób, aby to zrobić? Znalazłem jeden wątek wspominający ten sam temat, dodając słowniki do tablicy słowników [], a następnie zapętlając go, ale jak uzyskać nazwę dopasowujący słownik, jeśli znaleziono dopasowanie lub zastosuj moją drugą metodę Dictionary_Find, użyj dopasowanego słownika?

Odpowiedzi:

1 dla odpowiedzi № 1

Inne możliwe rozwiązanie, którego możesz użyćodbicie, aby uzyskać każdy słownik z A-T z klasy DictionaryInit. Utwórz tablicę zawierającą wartości A-T, przejdź przez tablicę i użyj refleksji, aby uzyskać słownik, i przetestuj ten słownik, jeśli znajdziesz dopasowanie, zwróć ten słownik i wyjdź z pętli. Coś jak:

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;
}

Właśnie wyciągnąłem kod z projektu, który wykonałem i zmodyfikowałem, aby go dopasować, ale go nie przetestowałem. Może potrzebuję kilku poprawek, ale mam nadzieję, że się zbliżysz!


0 dla odpowiedzi nr 2
// 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;
}
}