dedlfix: Generic

Beitrag lesen

Tach!

Ach ja, hier wollte ich doch auch noch drauf antworten.

Was Generic angeht, bin ich nicht die Experte. [...] Ich habe die Methode so verstandenm. dass die einen Wert/Parameter - myList - von einem beliebigen Typ erhält, der eine Liste ist, die eine Reihe von demselben Typ enthält. Mir ist aber nciht ganz klar, was der Type-Angabe T bei SetValue<T> aussagt.

T ist ein Platzhalter, der bei der Verwendung den dann angegebenen Typ repräsentiert. Andere Buchstaben sind auch möglich, das T hat sich eingebürgert, wenn man nur einen variablen Typ hat. Meist nimmt man für weitere das U und so weiter. Eine List<T> wird bei beispielsweise als List<DateTime> verwendet. Dann sind die Elemente darin vom Typ DateTime. Das T ist in dem Fall also ein DateTime. Das weiß aber der Code der List<T> nicht und kann deshalb nicht auf Mitglieder von DateTime zugreifen. Es muss dafür erst eine Einschränkung angegeben werden, also das "where T: DateTime". Dann allerdings kann T nur noch DateTime und abgeleitete Typen repräsentieren.

Wenn nun T nur vom Typ List<T> sein darf, dann gibt es eine Rekursion ohne Abbruch.

Abgesehen von dem Inhalt, wie soll dann die Methode aussehen, die alle Listenarten, u.a. auch eine Liste, die DateTime Elemente beinhaltet, aufnehmen kann.

Die kann dann keine Einschränkung in der where-Klausel haben. Im Gegenzug kannst du dann nicht auf spezielle Eigenschaften zugreifen, ohne einen Typecast gemacht zu haben. Vielleicht willst du ja nicht T entgegennehmen sondern eine List<T> oder IList<T> (ohne where-Klausel) Der konkrete Typ kann dann durchaus auch eine List<irgendwas> sein. Nur hat die Methode dann keine Ahnung davon (ohne Typecast). Aber es ist auf alle Fälle eine Liste.

dedlfix.