Frage
sah ich diese Antwort von Jon auf generisches Objekt mit unbekanntem Typ initialisieren :
Wenn Sie eine einzelne Sammlung enthalten mehrere unabhängige Arten von Werte, jedoch müssen Sie verwenden
List<object>
Ich vergleiche nicht ArrayList
vs List<>
, aber ArrayList
vs List<object>
, da beide Elemente vom Typ object
Belichtung wird. Was wäre der Vorteil entweder in diesem Fall mit?
EDIT: Es ist kein Problem für die Typsicherheit hier, da beide Klasse object
als Element aussetzt. Man muss noch von object
auf die gewünschte Art werfen. Ich bin mehr daran interessiert, etwas anderes als Typ Sicherheit.
EDIT: Danke Marc GRA und Sean für die Antwort. Sorry, ich kann nur 1 als Antwort auswählen, so dass ich beide abstimmen.
Lösung
Sie werden in der Lage, die LINQ-Erweiterungsmethoden direkt mit List<object>
zu verwenden, aber nicht mit ArrayList
, wenn Sie einen Cast<object>()
/ OfType<object>
(dank vs IEnumerable<object>
IEnumerable
) injizieren. Das lohnt ziemlich viel, auch wenn Sie nicht brauchen, Typsicherheit etc.
Die Geschwindigkeit wird etwa gleich sein; structs noch verpackt werden, usw. - so gibt es nicht viel anders, sie auseinander zu. Abgesehen davon, dass ich neige dazu ArrayList
zu sehen „oops, Legacy-Code schreibt jemand wieder ...“ ;-p
Andere Tipps
Ein großer Vorteil List<object>
zu verwenden ist, dass in diesen Tagen die meisten Code geschrieben ist die generische Klassen / Schnittstellen zu verwenden. Ich vermute, dass in diesen Tagen die meisten Leute würden eine Methode schreiben, die anstelle eines IList<object>
eine IList
nimmt. Da ArrayList
IList<object>
nicht implementiert würden Sie nicht in der Lage eine Array-Liste in diesen Szenarien zu verwenden.
Ich neige dazu, der nicht-generischen Klassen / Schnittstellen als Legacy-Code zu denken und zu vermeiden, dass sie, wenn möglich.
In diesem Fall ArrayList
vs. List<Object>
dann bemerken Sie keine Unterschiede in der Geschwindigkeit. Möglicherweise gibt es einige Unterschiede in den tatsächlichen Methoden, die auf jedem von diesen zur Verfügung steht, insbesondere in .NET 3.5 und Erweiterungsmethoden zu zählen, aber das hat mehr zu tun mit etwas veralteten Arraylist zu sein als alles anderes.
Ja, neben typsicher ist, generische Sammlungen könnten tatsächlich schneller sein.
Aus der MSDN ( http://msdn.microsoft. com / en-us / library / system.collections.generic.aspx )
Die System.Collections.Generic Namespace enthält Schnittstellen und Klassen, die zu Gattungs definieren Sammlungen, die es erlauben Benutzern stark typisierte Sammlungen erstellen, dass eine bessere Typsicherheit und Leistung als nicht-generic stark typisierte Sammlungen.
einig Benchmarking tun und Sie werden wissen, was am besten durchführt. Ich guestimate, dass der Unterschied sehr klein ist.
List <> ist eine typsichere Version von Arraylist. Es wird garantiert, dass Sie den gleichen Objekttyp in der Sammlung bekommen.