ArrayList vs liste

StackOverflow https://stackoverflow.com/questions/391088

  •  23-08-2019
  •  | 
  •  

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top