Autor Beitrag
Master_BB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mi 03.06.09 14:33 
Hallo, ich habe folgendes komplexes Problem in dessen Kern wohl steckt wie ich den Typ einer Generischen Liste zu fassen bekomme.

Wir haben
ausblenden 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>;
  //B,C ist abgeleitet von A (A=Basisklasse)
  
  forall (Object[] item in new Object[]{ new Object[]{ lc, otherObjs }
                                         new Object[]{ lb, otherObjs }
                                       })
  {
    la = item[0as List<A> //DIES HÄTTE ICH GERN GEHT ABER NICHT!
  }

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 03.06.09 14:43 
Etwas merkwürdige Konstruktion, Typsicherheit ist was anderes ;) .
Was du suchst, nennt sich Kovarianz. 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:
ausblenden 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];
}

_________________
>λ=