2012-12-21 37 views
6

Tôi đã tìm thấy rất nhiều thông tin trên web về việc làm từ điển có thể thực hiện các trường hợp không nhạy cảm như vậy nếu tôi thêm cặp khóa/giá trị ("A", "value") gọiTrường hợp từ điển nhạy cảm phím

MyDict["a"] == MyDict["A"] 

sẽ trả về giá trị đúng.

Những gì tôi muốn biết là tại sao tôi nhận được một lỗi "chìa khóa đã được thêm" khi tôi làm

MyDict.Add("A", "value1"); 
MyDict.Add("a", "value2"); 

nếu tôi định nghĩa từ điển của tôi để làm trường hợp nhạy cảm look-up. Không có cách nào để xác định một từ điển để có thể thêm các phím cased khác nhau?

+3

Làm việc tốt cho tôi. Bạn có chắc là bạn đang hoạt động trên một từ điển trống không? – Mir

+0

Bạn có thể cung cấp một ví dụ mã hoàn chỉnh (có thể chạy được) thể hiện sự cố bạn gặp phải không? –

Trả lời

9

Từ điển có phân biệt chữ hoa chữ thường theo mặc định - bạn không cần phải làm gì cả.

Dictionary<string, string> myDict = new Dictionary<string, string>(); 
myDict.Add("A", "value1"); 
myDict.Add("a", "value2"); 

Xem mã của bạn đang hoạt động trực tuyến tại đây: ideone.

Nếu bạn gặp lỗi với mã của mình thì đó là do một trong những khóa đó đã tồn tại trong từ điển của bạn.

+0

Nó đã tồn tại (có nghĩa là tôi cần cà phê), thật không may là tôi phải tự tạo một từ điển lớn với một tấn các giá trị và không tính đến khả năng sao chép vào. Cảm ơn bạn, tôi cũng chưa từng thấy ideone trước đây cảm ơn bạn vì điều đó. – spots

6

Tất cả Dictionaries phân biệt chữ hoa chữ thường. Nhưng bạn có thể sử dụng các trình so sánh chuỗi phân biệt chữ hoa chữ thường được cung cấp bởi lớp StringComparer để tạo các từ điển có khóa chuỗi phân biệt chữ hoa chữ thường.

Kiểm tra từ ideone.

1

OP thực sự chính xác nếu anh ấy đang sử dụng Lớp StringDictionary. Trang web của Microsoft tuyên bố rằng khóa được chuyển đổi thành chữ thường trước khi nó được lưu trữ (https://msdn.microsoft.com/en-us/library/system.collections.specialized.stringdictionary(v=vs.110).aspx). Để làm cho các trường hợp quan trọng nhạy cảm, sử dụng từ điển chung như Mark Byers đề xuất hoạt động độc đáo. Nếu bạn muốn một khóa không phân biệt chữ hoa chữ thường, StringDictionary hoạt động tốt.

Các vấn đề liên quan