2010-04-07 23 views
13

Acabo de notar que los objetos HashTable tienen un método Contiene y CotainsKey, con la misma descripción. Así que sólo son sinónimos o hay som edifference detrás de las escenas.Net Hashtable - Contiene vs ContainsKey

+1

Buena pregunta! 'Contains' está ahí para implementar' IDictionary.Contains', que "determina si el objeto' IDictionary' contiene un elemento con la clave especificada "- entonces ¿por qué está' ContainsKey' allí ?! – AakashM

+0

hmm comida para el pensamiento. ¿Por qué no abre una pregunta por separado para esto? – Midhat

Respuesta

18

Si examina el código de Contiene con reflector, puede ver que llama directamente a ContainsKey.

La IL es:

.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 
} 

Esto se traduce en lo siguiente C#

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

¿Por qué ContainsKey es público? – Imad

8

El método Contains simplemente llama al método ContainsKey internamente - se puede comprobar esto utilizando Reflector.