2010-04-07 35 views
13

Tôi vừa nhận thấy các đối tượng HashTable có một phương thức Contains và CotainsKey, với cùng một mô tả. Vậy là họ chỉ đồng nghĩa hoặc là có som edifference đằng sau hậu trường.Net Hashtable - Chứa vs ContainsKey

+1

Câu hỏi hay! 'Contains' là có để thực hiện' IDictionary.Contains', mà "xác định xem đối tượng' IDictionary' có chứa một phần tử với khóa được chỉ định "- vậy tại sao' ContainsKey' ở đó ?! – AakashM

+0

thực phẩm hmm để suy nghĩ. Tại sao bạn không mở một câu hỏi riêng cho việc này. – Midhat

Trả lời

18

Nếu bạn kiểm tra mã chứa Chứa phản xạ, bạn có thể thấy rằng nó trực tiếp gọi ContainsKey.

Các IL là:

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

này dịch như sau C#

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

Vậy tại sao ContainsKey là công khai? – Imad

8

Phương pháp Contains chỉ gọi phương thức ContainsKey nội bộ - bạn có thể kiểm tra điều này bằng Reflector.