Generics und System.Collections

8

Nach dem Wechsel zu .NET 2.0+ gibt es überhaupt einen Grund, den Namespace systems.Collections (neben der Beibehaltung alten Codes) noch zu verwenden? Soll stattdessen immer der Generics-Namespace verwendet werden?

    
leora 30.11.2008, 11:41
quelle

4 Antworten

12

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.

    
Scott Dorman 30.11.2008, 12:21
quelle
0

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.

    
Daniel Earwicker 30.11.2008 11:53
quelle
0

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.

    
terjetyl 30.11.2008 12:23
quelle
0

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.

    
Cameron MacFarland 30.11.2008 12:35
quelle

Tags und Links