2009-04-17 10 views
5

J'essaie de générer un graphique d'objet par réflexion. Il y a plusieurs types génériques (listes, dictionnaires). Je ne connais pas les types (chaîne, objet, etc.) qu'ils contiennent mais je veux les lister (en utilisant .ToString()).Liste/Dictionnaire générique

Alors, existe-t-il un moyen de générer une liste/dictionnaire générique de façon générique, c'est-à-dire sans écrire des fonctions surchargées pour chaque clé < -> value combintation?

je pense qu'il sera possible avec .NET 4.0, mais qui est actuellement pas encore ici ..

+0

@ Brian - en fait, non. –

+0

Je me demande si le mot-clé var peut aider avec ceci. Je ne le soupçonne pas. – Brian

Répondre

4

Si vous utilisez la réflexion, génériques devient très délicate. Pouvez-vous simplement utiliser les interfaces non génériques? IDictionary/IList? Ce serait un beaucoup plus facile ... quelque chose comme:

static void Write(object obj) { 
    if (obj == null) { } 
    else if (obj is IDictionary) { Write((IDictionary)obj); } 
    else if (obj is IList) { Write((IList)obj); } 
    else { Console.WriteLine(obj); } 
} 
static void Write(IList data) { 
    foreach (object obj in data) { 
     Console.WriteLine(obj); 
    } 
} 
static void Write(IDictionary data) { 
    foreach (DictionaryEntry entry in data) { 
     Console.WriteLine(entry.Key + "=" + entry.Value); 
    } 
} 
+0

Un cas classique de réflexion trop complexe. Une liste générique est assignable à IList, donc j'ai juste besoin de savoir s'il s'agit d'une liste ou d'un dictionnaire. Merci. – Sascha

+0

En fait, aucun n'est automatiquement convertible; Il n'est pas vrai que IList : IList, pas IDictionary : IDictionary - mais la plupart des implémentations fournissent les deux. –