/ / C # Comment parcourez-vous plusieurs dictionnaires? - c #, boucles, dictionnaire

C # Comment parcourez-vous plusieurs dictionnaires? - c #, boucles, dictionnaire

Un dictionnaire standard ressemblerait à ceci:

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

Tous ces éléments appartiennent à une classe appelée DictionaryInit. Pour l’instant, je vérifie la valeur s’il existe une correspondance avec ce booléen:

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

Maintenant, je cherche une méthode plus efficace pourparcourez chaque dictionnaire et, s’il y a correspondance, obtenez ce dictionnaire particulier pour l’utiliser dans une méthode ultérieure, voici à quoi il ressemble maintenant dans un 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
}

Avec les dictionnaires de A-T, ce serait beaucoup deif / else "s! Y a-t-il une meilleure façon de faire cela? J'ai trouvé un fil de discussion mentionnant le même sujet, en ajoutant les dictionnaires à un tableau de dictionnaires [] puis en passant en boucle dessus, mais comment puis-je obtenir le nom du dictionnaire correspondant si une correspondance est trouvée ou faire ma deuxième méthode, Dictionary_Find, utiliser le dictionnaire correspondant?

Réponses:

1 pour la réponse № 1

Une autre solution possible, vous pouvez utiliserréflexion pour obtenir chaque dictionnaire de A-T de la classe DictionaryInit. Créez un tableau contenant les valeurs A-T, parcourez le tableau, utilisez la réflexion pour obtenir le dictionnaire et testez ce dictionnaire. Si vous trouvez une correspondance, renvoyez ce dictionnaire et quittez la boucle. Quelque chose comme:

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

Je viens juste de récupérer rapidement du code d’un projet que j’ai fait et que j’ai modifié pour l'adapter, mais je ne l'ai pas testé. Il faudra peut-être quelques ajustements, mais j'espère que ça vous rapproche!


0 pour la réponse № 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;
}
}