2010-04-07 6 views
13

Je viens de remarquer que les objets HashTable ont une méthode Contains et CotainsKey, avec la même description. Alors, sont-ils des synonymes ou est-il som edifference les coulisses. Hashtable Net - Contient vs ContainsKey

+1

Bonne question! 'Contains' est là pour implémenter' IDictionary.Contains', qui "détermine si l'objet' IDictionary' contient un élément avec la clé spécifiée "- alors pourquoi 'ContainsKey' est là ?! – AakashM

+0

hmm matière à réflexion. Pourquoi ne pas ouvrir une question distincte pour cela. – Midhat

Répondre

18

Si vous examinez le code de Contient avec réflecteur, vous pouvez voir qu'il appelle directement ContainsKey.

L'IL est:

.method public hidebysig newslot virtual instance bool Contains(object key) cil managed 
{ 
    .maxstack 8 
    L_0000: ldarg.0 
    L_0001: ldarg.1 
    L_0002: callvirt instance bool System.Collections.Hashtable::ContainsKey(object) 
    L_0007: ret 
} 

Cela se traduit comme suit C#

public virtual bool Contains(object key) 
{ 
    return this.ContainsKey(key); 
} 
+0

Alors pourquoi ContainsKey est public? – Imad

8

La méthode Contains appelle simplement la méthode ContainsKey interne - vous pouvez le vérifier en utilisant Reflector.