47 votes

ArrayList vs List <object>

J'ai vu cette réponse de Jon sur Initialiser l'objet générique avec type inconnu:

Si vous voulez une collection unique de contenir plusieurs sans rapport avec les types de les valeurs, cependant, vous aurez à utiliser List<object>

Je ne suis pas comparer ArrayList vs List<>, mais ArrayList vs List<object>, que les deux seront d'exposer les éléments de type object. Quel serait l'avantage d'utiliser soit l'un, dans ce cas?

EDIT: C'est pas une préoccupation pour la sécurité de type ici, puisque les deux de la classe est d'exposer object comme son élément. On a besoin encore de sorts object pour le type désiré. Je suis plus intéressé par rien d'autre que de type de sécurité.

EDIT: Merci Marc Gravel et Sean pour la réponse. Désolé, je ne peux choisir 1 réponse, je vais donc jusqu'voter à la fois.

76voto

Marc Gravell Points 482669

Vous serez en mesure d'utiliser l'extension LINQ méthodes directement avec List<object>, mais pas avec ArrayList, à moins que vous injecter un Cast<object>() / OfType<object> (grâce à l' IEnumerable<object> vs IEnumerable). Que vaut un peu, même si vous n'avez pas besoin de type de sécurité, etc.

Le débit sera le même; les structures seront encore en boîte, etc - donc, il n'y a pas grand chose d'autre à dire à part. Sauf que j'ai tendance à voir ArrayList comme "oups, quelqu'un est de l'écriture de code hérité de nouveau..." ;-p

43voto

Sean Points 22088

Un gros avantage de l'utilisation de List<object> est que de nos jours la plupart du code est écrit pour utiliser les classes / interfaces génériques. Je soupçonne que de nos jours la plupart des gens écrivent une méthode qui prend un IList<object> au lieu d'un IList . Étant donné que ArrayList n'implémente pas IList<object> vous ne pourrez pas utiliser une liste de tableaux dans ces scénarios.

J'ai tendance à considérer les interfaces / classes non génériques comme du code hérité et à les éviter autant que possible.

11voto

Lasse V. Karlsen Points 148037

Dans ce cas, ArrayList vs List<Object> alors vous ne remarquerez aucune différence de vitesse. Il peut y avoir des différences dans les méthodes réelles disponibles sur chacun d'eux, en particulier dans .NET 3.5 et les méthodes d'extension de comptage, mais cela a plus à voir avec ArrayList étant quelque peu obsolète qu'autre chose.

5voto

Tamas Czinege Points 49277

Oui, en plus d'être typesafe, générique collections pourrait effectivement être plus rapide.

À partir de MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)

Le Système De.Les Collections.Générique espace de noms contient des interfaces et les classes qui définissent générique les collections, qui permettent aux utilisateurs de créer des collections fortement typées fournir une meilleure sécurité de type et performances que les non-générique fortement tapé collections.

1voto

tuinstoel Points 6329

Faites des analyses comparatives et vous saurez ce qui fonctionne le mieux. Je pense que la différence est très petite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X