Master_BB - Mi 03.06.09 14:33
Titel: Typecast generischer listen
Hallo, ich habe folgendes komplexes Problem in dessen Kern wohl steckt wie ich den Typ einer Generischen Liste zu fassen bekomme.
Wir haben
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| List<C> lc = new List<C>; List<B> lb = new List<B>; List<A> la = new List<A>; forall (Object[] item in new Object[]{ new Object[]{ lc, otherObjs } new Object[]{ lb, otherObjs } }) { la = item[0] as List<A> } |
Ihr seht in der Forschleife können 2 Verschiedene Generische Listen kommt die jedoch
Typmäßig auf List<A> runtergebrochen werden könnten.
Wie mache ich diesen Typecast mit ConvertAll<>?
wenn da jemand eine lösung hätte wäre ich extrem FROH!
THX
Kha - Mi 03.06.09 14:43
Etwas merkwürdige Konstruktion, Typsicherheit ist was anderes ;) .
Was du suchst, nennt sich
Kovarianz [
http://de.wikipedia.org/wiki/Kontravarianz_(Informatik)]. Das kann aber a) erst C# 4.0 und b) ist List<T> invariant.
IEnumerable<T> ist aber zum Glück kovariant, was auch unter .NET 3.5 leicht simuliert werden kann:
C#-Quelltext
1: 2: 3: 4: 5:
| forall (Object[] item in new Object[]{ new Object[]{ lc.Cast<A>(), otherObjs } new Object[]{ lb.Cast<A>(), otherObjs } }) { var la = (IEnumerable<A>)item[0]; } |