2010-03-24 8 views
1

Lorsque vous traitez une collection de paires clé/valeur, y a-t-il une différence entre l'utilisation de sa méthode Add() et son affectation directe?Performance pour myCollection.Add() vs myCollection ["key"]

Par exemple, un HtmlGenericControl aura une Attributs Collection:

var anchor = new HtmlGenericControl("a"); 

// These both work: 
anchor.Attributes.Add("class", "xyz"); 
anchor.Attributes["class"] = "xyz"; 

est-il purement une question de préférence, ou est-il une raison de faire l'un ou l'autre?

Répondre

4

Ils sont équivalents pour votre usage, dans ce cas, l'exécution de ce:

anchor.Attributes["class"] = "xyz"; 

appelle en fait ce interne:

anchor.Attributes.Add("class", "xyz"); 

En AttributeCollection le poseur this[string key] ressemble à ceci:

public string this[string key] 
{ 
    get { } 
    set { this.Add(key, value); } 
} 

Donc, pour répondre à la question, dans le cas de AttributeCollection, c'est juste une question de préférence. Gardez à l'esprit que cela n'est pas vrai pour les autres types de collection, par exemple Dictionary<T, TValue>. Dans ce cas ["class"] = "xyz" mettrait à jour ou définirait la valeur, où .Add("class", "xyz") (s'il avait déjà une entrée "class") lancerait une erreur d'entrée en double.

+0

Cela est vrai pour AttributeCollection, mais pas nécessairement vrai pour tous les types de collection de valeurs-clés (NameValueCollection vient à l'esprit) – Jimmy

+0

@Jimmy - Correct, je vais modifier pour donner un exemple. –

+0

@Jimmy: J'ai fait un rapide NameValueConfigurationCollection. Ils semblent "fonctionnellement" identiques. Est-ce une différence de performance? @Nick: Oui, dans ce cas, j'utilisais un AttributeCollection quand je me demandais s'il y avait une différence. – Armstrongest