/ / C # Come si scorre tra più dizionari? - c #, cicli, dizionario

C # Come si loop tra più dizionari? - c #, cicli, dizionario

Un dizionario standard sarebbe simile a questo:

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

Variando da A-T, tutti questi sono in una classe chiamata DictionaryInit, adesso controllo il valore se c'è una corrispondenza con questo booleano:

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

Ora, sto cercando un metodo più efficiente perpassa in rassegna ogni dizionario e, se c'è una corrispondenza, prendi quel particolare dizionario per usarlo in un metodo successivo, questo è come appare ora in 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
}

Con i dizionari di A-T, sarebbe un sacco dise / else "s! Esiste un modo migliore per farlo? Ho trovato un thread che menziona questo stesso argomento, aggiungendo i dizionari ad un array di dizionari [], quindi passandoci sopra, ma come ottengo il nome del un dizionario corrispondente se viene trovata una corrispondenza o il mio secondo metodo, Dictionary_Find, usa il dizionario corrispondente?

risposte:

1 per risposta № 1

Un'altra possibile soluzione, potresti usareriflessione per ottenere ogni dizionario da A-T dalla classe DictionaryInit. Creare un array che contenga i valori A-T, scorrere l'array e utilizzare reflection per ottenere il dizionario e testare il dizionario, se si trova una corrispondenza, restituire il dizionario ed uscire dal ciclo. Qualcosa di simile a:

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

Ho appena preso rapidamente del codice da un progetto che ho fatto e lo ho modificato per adattarlo ma non lo ho testato. Potrebbe essere necessario qualche modifica, ma si spera che ti avvicini!


0 per risposta № 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;
}
}