Tôi có mã C# sau trong ứng dụng ASP.NET MVC của mình. Tôi cố gắng so sánh 2 string
bằng phương pháp Equals
, với culture = "vi"
. Mã của tôi dưới đây:String.Equals GID trả về false?
string culture = "vi";
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentUICulture =
System.Threading.Thread.CurrentThread.CurrentCulture;
var CCC = string.Equals("CategId", "CATEGID", StringComparison.CurrentCultureIgnoreCase);
var xx = string.Equals("TestGID", "TestGID", StringComparison.CurrentCultureIgnoreCase);
var zz = string.Equals("id", "ID", StringComparison.CurrentCultureIgnoreCase);
Kết quả:
CCC = sai;
xx = true;
zz = true;
Tôi không biết tại sao CCC
là false
. Có gì sai không? Nếu tôi đặt culture = id, ko, en
, v.v ... thì CCC = true
. Ai có thể giúp tôi?
Điều này ném một ngoại lệ: 'Văn hóa' vi 'là một nền văn hóa trung tính. Nó không thể được sử dụng trong định dạng và phân tích cú pháp và do đó không thể được đặt làm văn bản hiện tại của thread.' Bạn cần sử dụng 'vi-VN' (mặc dù vẫn sẽ trả về' false') –
Đối với các ứng dụng không phải GUI, thay vào đó sử dụng 'StringComparer Comparer = StringComparer.Create (CultureInfo mới ("vi-VN"), đúng); Comparer.Equals ("CategId", "CATEGID"); 'Điều này là do văn hóa hiện tại chậm. – Ben
Vì các chuỗi bạn so sánh là "rõ ràng" (đối với một số giá trị "rõ ràng") bằng tiếng Anh hoặc tiếng Anh, bạn nên, như Kevin gợi ý, sử dụng 'InvariantCultureIgnoreCase'. Chúng tôi đã gặp phải sự cố tương tự với "tên cài đặt" khi người nào đó sử dụng tiếng Thổ Nhĩ Kỳ đã kích hoạt vấn đề [chấm và không có chấm tôi] (https://en.wikipedia.org/wiki/Dotted_and_dotless_I), trong đó 'SID' không còn bằng' sid' thậm chí khi bỏ qua trường hợp. – TripeHound