J’ai une classe ( SomeClass
) qui contient une propriété Name
du type de ssortingng
. Et je dois stocker un tableau de cette classe et trouver ses éléments par leurs noms. Pour cela, il existe deux types de collections: KeyedCollection
et Dictionary
. Ma question est la suivante: quelle différence entre eux et dans ce cas? Il est préférable d’utiliser KeyedCollection
et Dictionary
? Merci pour toute aide dans l’explication.
Aucun des commentaires précédents ne traite de la différence la plus importante entre les deux: KeyedCollection conserve vos éléments dans l’ordre dans lequel ils ont été ajoutés (le premier élément ajouté est à l’index 0 et le dernier ajouté au dernier index). Dictionary ne le fait pas (ou du moins il n’est jamais garanti de le faire).
Cet avantage supplémentaire de KeyedCollection a un faible coût de performance. Sous les couvertures, vous payez le coût de la maintenance d’un dictionnaire et d’une liste.
Voici une bonne explication concernant les différences entre Dictionary et KeyedCollection: http://geekswithblogs.net/NewThingsILearned/archive/2010/01/07/using-keyedcollectionlttkey-titemgt.aspx
Les points principaux sont:
Par défaut, KeyedCollection crée un dictionnaire sous les couvertures.
Si la clé a également un sens en tant que partie de la valeur et définit également l’unicité alors c’est le but d’une collection de clés.
Si vous souhaitez modifier le support du dictionnaire, utilisez ce moteur:
protected KeyedCollection( IEqualityComparer comparer, int dictionaryCreationThreshold)
Un KeyedCollection permet des clés mutables et des moyens de gérer le changement de clé. Dictionary n’autorise pas les modifications de clé. Deuxièmement, si vous avez une collection qui nécessite une recherche, la logique pour extraire la clé de l’entité rest à un endroit – alors que la maintenance du dictionnaire devra placer une logique d’extraction de clé à chaque endroit où des éléments sont ajoutés / supprimés du dictionnaire.
Un KeyedCollection
doit être utilisé lorsque la clé est sur l’élément lui-même.
Par défaut, KeyedCollection
est un wrapper Collection
autour d’un dictionnaire. Lorsque vous utilisez de petites collections et / ou que vous préférez récupérer directement des éléments, KeyedCollection
fournit un constructeur qui KeyedCollection
un paramètre dictionaryCreationThreshold
, qui indique le nombre de collections à utiliser pour Dictionary
.
Un autre aspect de KeyedCollection
est que vous pouvez choisir de changer la propriété de la clé (à condition que leurs types correspondent). Cela peut être bon pour les éléments à double clé, etc. En termes de performances, je ne pense pas que l’enveloppement d’un dictionnaire ait beaucoup de temps, sauf si vous générez un grand nombre d’instances KeyedCollection
ou si vous utilisez il y a un dictionnaire).
Une chose que j’espère voir dans KeyedCollection
est de la KeyedCollection
, mais vous pouvez créer un type de béton générique tout aussi facilement.
Vous ne pouvez pas utiliser KeyedCollection car il s’agit d’un résumé: http://msdn.microsoft.com/en-us/library/ms132438.aspx . Cela signifie que vous ne pouvez pas en créer un object.