Die generischen Sammlungen werden in den meisten Fällen schneller ausgeführt als die nicht generischen Gegenstücke und bieten Ihnen den Vorteil einer stark typisierten Sammlung. Wenn Sie die in System.Collections und System.Collections.Generic verfügbaren Sammlungen vergleichen, erhalten Sie die folgende "Migration":
%Vor%ICollection ist unveränderbar (keine Mitglieder können den Inhalt der Sammlung ändern), während ICollection & lt; T & gt; ist veränderbar. Dies macht die Schnittstellen nur in ihrem Namen ähnlich, während ICollection und IEnumerable & lt; T & gt; unterscheiden sich durch sehr wenig.
Von dieser Liste sind die einzigen nicht-generischen Klassen, die kein generisches Gegenstück haben, BitArray und CaseInsensitiveComparer.
Unter bestimmten Umständen schneiden die generischen Container besser ab als die alten. Sie sollten unter allen Umständen mindestens genauso gut funktionieren wie die alten. Und sie helfen, Programmierfehler zu fangen. Es ist eine seltene Kombination aus hilfreicher Abstraktion und besserer Leistung, weshalb es keinen Grund gibt, sie zu vermeiden. Nur wenn man gezwungen ist von einer krümeligen Bibliothek mit der man arbeiten muss vor Generika geschrieben wurde.
Ich habe ein Interview mit Anders Hejlsberg aus dem c # -Team gesehen und er wurde gefragt, ob es etwas bereute, was er mit den früheren Versionen von .net getan habe. Keine Generika in asp.net 1.0 war das erste, was er erwähnt. Da es dort nicht vorhanden war, mussten sie Workarounds implementieren, die bei den .net-Bibliotheken bleiben und bald zu Legacy-Code werden.
Ich benutze nie den System.Collections-Namespace und von seiner Aussage scheint dies der richtige Pfad zu sein.
Bei der Verwendung von Generics ist die einzige schlechte Sache die Varianz. Wenn Sie zum Beispiel ein List<Person>
haben und es an eine Methode übergeben wollen, die List<object>
akzeptiert, können Sie nicht, weil List<Person>
kann nicht direkt in List<object>
umgewandelt werden.
Dieses Problem ist in .NET 4.0 gelöst.
Tags und Links .net c# generics collections