2009-04-17 20 views
5

Próbuję wyprowadzić wykres obiektów za pomocą odbicia. Jest w nim kilka rodzajów ogólnych (listy, słowniki). Nie znam typów (ciągów, obiektów itp.), Które zawierają, ale chcę je wymienić (używając .ToString()).Ogólna lista/słownik

Czy istnieje sposób generowania ogólnej listy/słownika w sposób ogólny, tzn. Bez zapisywania przeciążonych funkcji dla każdego klucza < -> zwalczanie wartości?

myślę, że będzie to możliwe w .NET 4.0, ale w tej chwili nie jest jeszcze tutaj ..

+0

@Brian - Rzeczywiście, nie. –

+0

Zastanawiam się, czy słowo kluczowe var może w tym pomóc. Podejrzewam, że nie. – Brian

Odpowiedz

4

Jeśli używasz refleksji, generycznych staje się bardzo trudne. Czy możesz po prostu użyć nie ogólnych interfejsów? IDictionary/IList? Byłoby dużo łatwiej ... coś takiego:

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

Klasyczny przypadek myślenia zbyt skomplikowany. Ogólna lista jest przypisywana do ILista, więc potrzebuję tylko dowiedzieć się, czy jest to lista czy słownik. Dzięki. – Sascha

+0

W rzeczywistości żadna nie jest automatycznie wymienialna; nie jest prawdą, że IList : IList, nie to IDictionary : IDictionary - ale większość implementacji zapewnia oba. –