2009-04-17 6 views
5

Sto provando a generare un grafico oggetto tramite riflessione. In esso ci sono diversi tipi generici (liste, dizionari). Non conosco i tipi (stringa, oggetto, ecc.) Che contengono ma voglio elencarli (usando .ToString()).Elenco/dizionario generico

Quindi, esiste un modo per generare un elenco/dizionario generico in modo generico, ovvero senza scrivere funzioni sovraccariche per ogni chiave < -> combinazione di valori?

penso che sarà possibile con .NET 4.0, ma non è attualmente ancora qui ..

+0

@ Brian - anzi, no. –

+0

Mi chiedo se la parola chiave var possa essere d'aiuto. Sospetto di no. – Brian

risposta

4

Se si utilizza la riflessione, i generici diventa molto difficile. Puoi semplicemente usare le interfacce non generiche? IDictionary/IList? Sarebbe un molto più facile ... qualcosa di simile:

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 classico caso di pensiero troppo complesso. Una lista generica è assegnabile a IList, quindi ho solo bisogno di capire se si tratta di una lista o di un dizionario. Grazie. – Sascha

+0

In realtà, nessuno dei due è automaticamente convertibile; non è vero che IList : IList, non quello IDictionary : IDictionary - ma la maggior parte delle implementazioni fornisce entrambi. –