2009-04-17 16 views
5

Estoy tratando de generar un gráfico de objetos a través de la reflexión. En él hay varios tipos genéricos (listas, diccionarios). No sé los tipos (cadena, objeto, etc.) que contienen, pero quiero enumerarlos (usando .ToString()).Lista genérica/Diccionario

Entonces, ¿hay alguna manera de generar una lista genérica/diccionario de forma genérica, es decir, sin escribir funciones sobrecargadas para cada clave < -> valor de combinación?

Creo que va a ser posible con .NET 4.0, pero eso no es actualmente embargo aquí ..

+0

@ Brian - de hecho, no. –

+0

Me pregunto si la palabra clave var puede ayudar con esto. Sospecho que no. – Brian

Respuesta

4

Si está utilizando la reflexión, los genéricos se pone muy complicado. ¿Puedes simplemente usar las interfaces no genéricas? IDictionary/IList? Sería una gran cantidad más fácil ... algo así como:

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 caso clásico de pensamiento demasiado complejo. Una lista genérica es asignable a IList, así que solo necesito averiguar si es una lista o un diccionario. Gracias. – Sascha

+0

En realidad, ninguno es automáticamente convertible; no es cierto que IList : IList, no IDictionary : IDictionary, pero la mayoría de las implementaciones proporcionan ambos. –

Cuestiones relacionadas