Question

Je besoin d'une classe de collection générique que je peux ajouter, et d'énumérer plus. Depuis hérite ICollection<T> de IEnumerable<T>, la classe a vraiment besoin juste d'hériter de ICollection<T>. Y at-il une simple classe générique dans le BCL que seulement hérite ICollection<T> comme une version générique de CollectionBase? Sinon, quelle classe se rapproche le plus?

Je suppose que List<T> qui est ce que je l'ai utilisé, mais je ne ai pas besoin d'aspect séquentiel. Y at-il quelque chose de mieux (je veux dire [plus petite empreinte mémoire / un accès plus rapide / plus simple])? Sac serait parfait si elle existait.

EDIT 1: Dans mon cas particulier, je .concating à un autre IEnumerable, l'interrogation, puis afficher les résultats (sans ordre particulier). Je ne cherche pas à faire ma propre classe. J'ai juste besoin de faire une collection de jetable tant de fois, que je pensais que ce serait utile de trouver le meilleur jetable à utiliser. Parce que je sens que j'ai quelque chose fait tant de fois semblable, je sentais que je devrais garder cette question aussi générique que possible (sans jeu de mots), je sais mieux maintenant.

EDIT 2: Merci pour les réponses de tout le monde, Comme @BlueRaja souligné, toute classe simple va avoir sur la même tête, et donc je pense que je vais coller avec mes façons originales d'utiliser List<T>. Comme ils sont tous sur la même chose, mes raisons stupides de « Il est plus facile de taper », et « je n'ai pas d'apporter encore un autre en utilisant » ne sont pas si mauvaises raisons.

Était-ce utile?

La solution

  

[plus petite empreinte mémoire / un accès plus rapide / plus simple]

Ils vont tous avoir à peu près la même empreinte mémoire, et si vous utilisez l'interface ICollection ne changera pas.

Ce qui importe vraiment est ce qui le mieux pour l'échelle des opérations dont vous avez besoin: liste chaînée fait mieux suffixant / retrait (de la tête / éléments de la queue), tandis qu'une liste basée sur la baie a accès aléatoire. Il existe d'autres structures trop - que vous devez utiliser dépend de votre application

.

Autres conseils

Vous aurez probablement envie de regarder dans Collection<T> . Il a été conçu dans le but exprès de sous-classement, comme la documentation indique:

  

Fournit la classe de base pour une collection générique.

Cela dit, l'une des collections sont très bien; J'ai hérité de List<T>, Stack<T> et ainsi de suite; ramasser selon l'une est plus proche de la fonctionnalité que vous avez réellement besoin.

Plus petit et plus rapide tout dépend de vous exactement ce que vous faites et ce que vos besoins. La seule autre classe que je pourrais recommander est LinkedList<> qui implémente ICollection<>.

Vous pouvez utiliser réflecteur pour vérifier la LCM .NET et voir quelles classes utiliser cette collection. (Il y a une fonction de recherche qui peut être démarré par F3.)

Vous pouvez également jeter un oeil à la C5 Bibliothèque pour voir si une collection a déjà été mis en œuvre qui répond à vos besoins. Consultez la page 13 du C5 Manuel pour la hiérarchie d'interface de collection.

CollectionBase existait avant tout de fournir un mécanisme simple pour créer des collections typées. Avec Generics, toutes les collections sont maintenant typés. La grande majorité des cas où des extensions de CollectionBase utilisés à utiliser ne devrait pas utiliser l'une des collections intégrées telles que List<> ou LinkedList<>.

Collection<> existe toujours pour ceux qui ont besoin d'une collection personnalisée pour des raisons autres que le type (par exemple, validation supplémentaire sur add, ou une logique non standard). Collection<> est loin d'être aussi couramment utilisé comme CollectionBase était et répond à un besoin beaucoup plus petit.

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