Nếu tôi thực hiện các tuyên bố sau:Tại sao string.Compare dường như xử lý các ký tự có dấu không nhất quán?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Kết quả là '-1', chỉ ra rằng 'mun' có một giá trị số thấp hơn so với 'Mun'.
Tuy nhiên, nếu tôi thực hiện tuyên bố này:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
tôi nhận được '1', chỉ ra rằng 'muntelier, Schewiz' nên đi trước.
Đây có phải là lỗi trong so sánh không? Hoặc, nhiều khả năng, là có một quy tắc tôi nên được tính đến khi sắp xếp chuỗi có chứa dấu
Lý do này là một vấn đề là, tôi đang sắp xếp một danh sách và sau đó thực hiện một bộ lọc nhị phân của nhãn hiệu đó có nghĩa là để có được mọi chuỗi bắt đầu bằng 'xxx'.
Trước đây tôi đã sử dụng phương pháp Linq 'Where', nhưng bây giờ tôi phải sử dụng chức năng tùy chỉnh này được viết bởi một người khác, bởi vì anh ấy nói nó hoạt động tốt hơn.
Nhưng chức năng tùy chỉnh dường như không tính đến bất kỳ quy tắc 'unicode' nào .NET có. Vì vậy, nếu tôi nói với nó để lọc bằng 'mün', nó không tìm thấy bất kỳ mục nào, mặc dù có các mục trong danh sách bắt đầu bằng 'mun'.
Điều này có vẻ là do thứ tự không nhất quán của các ký tự có dấu, tùy thuộc vào ký tự nào sau ký tự có dấu trọng âm.
OK, tôi nghĩ rằng tôi đã khắc phục được sự cố.
Trước khi lọc, tôi làm một loại dựa trên n chữ cái đầu tiên của mỗi chuỗi, nơi n là chiều dài của chuỗi tìm kiếm.
Đó là những khoảnh khắc như thế này mà tôi muốn .NET Framework là mã nguồn mở, vì vậy tôi chỉ có thể xem qua trong chế độ gỡ lỗi và tìm ra chính xác những gì nó đang làm. – Jonathan
@jonathanconway: Bước qua mã nguồn của thư viện lớp cơ sở là có thể, xem http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@divo Cảm ơn bạn đã tham khảo. Không bao giờ nhận ra điều này là có thể! – Jonathan