Frage

Anders ausgedrückt:

Gibt es einen guten Grund, wählen Sie eine lose typisierte Sammlung über einen Typ-sicher (HashTable vs.Wörterbuch)?Sind Sie noch da, nur für die Kompatibilität?

Soweit ich das verstanden habe, generische Sammlungen sind nicht nur Typ-sicher, aber Ihre Leistung ist besser.


Hier ist ein umfassender Artikel zum Thema: Eine Umfassende Untersuchung von Datenstrukturen Mit C# 2.0.

War es hilfreich?

Lösung

Die nicht-generischen Sammlungen sind so veraltet, dass sie von der in Silverlight verwendet CoreCLR entfernt habe und Mesh leben.

Andere Tipps

Es gibt Probleme auch mit COM Sichtbarkeit - COM-Interop kann nicht mit Generika verwendet wird

Für die Zukunft nur generische Sammlungen verwendet werden. Es gibt auch den Vorteil Box / Unboxing von Typen in der Sammlung zu vermeiden. Dies ist effizient ist, vor allem, wenn Sie eine Sammlung von Werttypen haben, den System.Object umgewandelt werden, wenn sie auf der Sammlung gespeichert werden, damit die Werte auf dem Heap zu speichern anstelle der Aufrufliste.

Im Hinblick auf die Verwendung von nicht-generischen Sammlungen für heterogene Sammlung von Sachen zu speichern, können Sie immer List verwenden, um die gleiche Sache zu erreichen. Schon aus diesem Grunde würde ich sagen, es gibt fast keinen Grund, alle nicht-generische Sammlungen immer wieder zu berühren.

Die Ausnahme hiervon wäre die Kompatibilität mit Systemen in anderen Sprachen oder mit früheren Versionen des .NET-Frameworks geschrieben zu halten, aber das ist ein ziemlich „kantig“ Fall, wenn Sie mich fragen.

Ich kann Ihnen sagen, dass XAML-Serialisierung von Sammlungen auf sie verlassen Umsetzung entweder IList oder IDictionary, so nicht generische Sammlungen mit uns für einige Zeit sein werden kommen.

würde ich nicht springen und sagen, die veraltet sind oder werden in nächster Zeit entfernt werden. Es ist wahr, dass Sie sollten mit nicht-generischen Sammlungen vermeiden, wenn Sie einen Grund haben nicht nicht eine generische Version verwenden. Tausende von Zeilen von Legacy (nicht so Legacy-Code) schwebt nach wie vor um (und wird für Jahre), die nicht generische Sammlungen wie Arraylisten unterstützen. Da diese die waren nur Sammlungen in .NET 1.0 und 1.1, es das ganze Jahr über (und missbraucht) wurde weit verbreitet.

ich immer noch gelegentlich mit einem alten O / R-Mapper interagieren geschrieben in .NET 1.1, die IList-Objekten zurückgibt. Ich habe eine Methode, die die Umwandlung in eine generische Liste tut <>, die nicht effizient ist, aber das ist so, wie es ist.

Und wenn Sie verschiedene Objekte im selben Array (komisch, aber möglich) speichern, müssen Sie braucht eine nicht-generische Sammlung. Die Strafe von Boxen und Unboxing ist etwas, das Sie auf jeden Fall zahlen müssen.

Haben Sie keine Angst, sie zu benutzen, wenn Sie das Gefühl, dass Sie zu haben.

kann es Fälle geben, in denen Sie Objekte von unbekannten Typen oder Objekte aus mehreren verschiedenen Typen speichern müssen, aber wenn man in der Tat die Art der Gegenstände wissen Sie, die Sie speichern wollen, dann kann ich nicht einen Grund, nicht zu verwenden, die sehen generische Version.

Edit: Wie kommentieren Sie können nur List<Object> verwenden - Doh

Ja, soweit ich verstehe, dass sie für die Kompatibilität mit bestehenden Produkten nur dort sind. Sie sollten immer die Art sichere Version verwenden (das heißt verwenden System.Collections.Generic über System.Collections).

http://msdn.microsoft.com/en-us/library /ms379564.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top