Tên NameValueCollection trong .NET về cơ bản là những gì được sử dụng cho QueryStrings để giữ cặp khóa/giá trị. Sự khác biệt lớn nhất là khi hai mục có cùng khóa được thêm vào. Với IDictionary, có hai cách để đặt giá trị. Sử dụng phương thức .Add() sẽ ném một lỗi trên một khóa trùng lặp khi khóa đã tồn tại. Nhưng chỉ cần đặt mục bằng giá trị sẽ ghi đè lên giá trị. Đây là cách IDictionary xử lý các khóa trùng lặp. Nhưng NameValueCollection sẽ thêm các giá trị như thế này: "value1, value2, value3". Vì vậy, giá trị mục hiện tại được nối thêm bằng dấu phẩy, sau đó giá trị mới được thêm vào mỗi lần.
Dường như với tôi rằng NameValueCollection này được tạo riêng cho truy cập và sử dụng QueryString. QueryString như "? A = 1 & b = 2 & a = 3" trong .NET sẽ cho kết quả của mục ["a"] = "1,3". Sự khác biệt về cách các khóa trùng lặp được xử lý là sự khác biệt 'thực sự', đó là sự khác biệt lớn nhất giữa hai phím.
I nghi ngờ rằng NameValueCollection cũng không sử dụng bảng băm để truy cập nhanh các khóa khi bộ sưu tập lớn vì truy cập này chậm hơn cho các bộ sưu tập nhỏ hơn mà không có bảng băm. Tôi đã không tìm thấy thông tin dứt khoát cho biết một NameValueCollection có hay không sử dụng một bảng băm để truy cập các khóa. Tôi do biết rằng một IDictionary sử dụng một bảng băm để truy cập các khóa trong một IDictionary với nhiều khóa là khá nhanh. Vì vậy, tôi nghi ngờ rằng NameValueCollection nhanh hơn cho các bộ sưu tập nhỏ hơn IDictionary. Nếu đoán của tôi là chính xác, sau đó nó có nghĩa là một shud NameValueCollection không có nghĩa là được sử dụng cho các bộ sưu tập lớn kể từ khi nó lớn hơn, nó ồ ạt chậm mà không có một bảng băm để truy cập các phím.
Đối với số lượng các phím trong một chuỗi truy vấn, con số này là bình thường rất nhỏ, vì vậy tôi wud đoán các NameValueCollection không không băm sử dụng, cho hiệu suất tốt hơn.Nhưng nếu Microsoft thiết kế mọi thứ cho hiệu suất, và cho những gì tốt nhất cho người dùng của họ, Windows wud là để khác với ngày hôm nay. Vì vậy, chúng tôi không thể giả định bất cứ điều gì mà 'shud được'.
Ngoài ra, tôi muốn làm rõ xác nhận quyền sở hữu không đúng bằng câu trả lời được bình chọn phổ biến nhất cho câu hỏi này. Nhận xét của Kateroh bên dưới câu trả lời không chính xác nói rằng nó cũng enuf, rằng tôi không cần phải thêm bất cứ điều gì cho nó. Nhưng tôi lặp lại bình luận của Kateroh ở đây vì vậy chỉ có thể nhiều người hơn sẽ nhận ra rằng câu trả lời phổ biến nhất là sai. Kateroh khẳng định một cách chính xác:
Nguồn
2016-01-22 16:17:33
NameValueCollection cũng hỗ trợ nhiều giá trị cho mỗi khóa (cần thiết cho chuỗi truy vấn, v.v.). –
Không đúng sự thật. Theo bài viết msdn này về namevaluecollection: http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx "Bộ sưu tập loại này không giữ nguyên thứ tự của phần tử, và không có đặt hàng cụ thể được đảm bảo khi liệt kê bộ sưu tập. " – kateroh