Lý do không sử dụng "==" để so sánh các chuỗi được bản địa hóa trong .NET là gì? Việc so sánh sẽ thực hiện như thế nào liên quan đến CultureInfo nếu tôi sử dụng nó?Tôi có nên sử dụng '==' cho các so sánh chuỗi địa phương hóa .NET không?
Trả lời
==
không nhạy cảm về văn hóa - đó là so sánh thứ tự đơn giản. Vì vậy, hai chuỗi văn hóa bằng nhau - hoặc thậm chí bằng nhau về các dạng chuẩn tắc khác - có thể không phải bằng nhau qua ==
. Về cơ bản, nó xử lý từng chuỗi như một mảng char
.
Quá tải String.operator ==
sẽ thực hiện so sánh thứ tự không biết văn hóa – so sánh các byte theo byte bằng cách sử dụng heavily optimized unrolled loop.
Gọi hàm bên trong giống như String.Equals(a, b, StringComparison.Ordinal)
Nếu bạn so sánh chuỗi nhận biết văn hóa với ==, ví dụ "Strasse" với "Straße", nó trả về false.
Nếu bạn cần so sánh nhận thức về văn hóa cho giao diện người dùng (Sắp xếp danh sách xem), bạn sử dụng String.Compare với CultureInfo có liên quan.
CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci) // Returns zero
+1 cho ví dụ. – Otiel
Bạn có hỏi về toán tử C# '==' không? Nếu vậy, bạn nên thêm thẻ C#. – phoog