Question
J'ai vu cette réponse de Jon sur Initialiser objet générique avec type inconnu :
Si vous voulez une seule collection contenir plusieurs types non apparentés de les valeurs, cependant, vous devrez utiliser
List<object>
Je ne compare pas ArrayList
vs List<>
, mais ArrayList
vs List<object>
, car les deux exposerons éléments de type object
. Quel serait l'avantage d'utiliser un ou l'autre dans ce cas?
EDIT: Il n'y a pas de souci de sécurité de type ici, puisque les deux classe expose object
comme son élément. Il faut encore jeter de object
au type désiré. Je suis plus intéressé par autre chose que la sécurité de type.
EDIT: Merci Marc Gravell et Sean pour la réponse. Désolé, je ne peux pas choisir 1 réponse, donc je vais voter en deux.
La solution
Vous serez en mesure d'utiliser les méthodes d'extension LINQ directement avec List<object>
, mais pas avec ArrayList
, à moins que vous injectez un Cast<object>()
/ OfType<object>
(grâce à IEnumerable<object>
vs IEnumerable
). Cela vaut la peine un peu, même si vous n'avez pas besoin de sécurité de type etc.
La vitesse sera de la même; struct seront toujours mis en boîte, etc - donc il n'y a pas grand chose à leur dire à part. Sauf que je tends à voir ArrayList
comme « oups, quelqu'un écrit à nouveau code hérité ... » ;-P
Autres conseils
Un grand avantage à utiliser List<object>
est que ces jours la plupart du code est écrit pour utiliser les classes génériques / interfaces. Je pense que ces jours-ci la plupart des gens écrire une méthode qui prend un IList<object>
au lieu d'un IList
. Étant donné que ArrayList
ne met pas en œuvre IList<object>
vous ne seriez pas en mesure d'utiliser une liste de tableau dans ces scénarios.
Je tends à penser des classes non génériques / interfaces comme code existant et les éviter autant que possible.
Dans ce cas, ArrayList
vs List<Object>
alors vous ne remarquerez aucune différence de vitesse. Il pourrait y avoir quelques différences dans les méthodes actuelles disponibles sur chacun d'entre eux, notamment dans .NET 3.5 et de comptage des méthodes d'extension, mais qui a plus à voir avec ArrayList étant un peu désapprouvée qu'autre chose.
Oui, en plus d'être typesafe, les collections génériques pourraient être en fait plus rapide.
Dans le MSDN ( http://msdn.microsoft. com / fr-fr / bibliothèque / system.collections.generic.aspx )
System.Collections.Generic espace de noms contient des interfaces et classes qui définissent générique collections, qui permettent aux utilisateurs de créer des collections fortement typés assurer une meilleure sécurité de type et performances que fortement non générique collections typées.
Faites des analyses comparatives et vous saurez ce qui fonctionne mieux. Je guestimate que la différence est très faible.
Liste <> est une version typesafe de ArrayList. Il garantira que vous obtiendrez le même type d'objet dans la collection.