Sự khác biệt và khi sử dụng là gì? Rủi ro gì nếu tôi luôn sử dụng ToLower()
và rủi ro gì nếu tôi luôn sử dụng ToLowerInvariant()
?
Sự khác biệt và khi sử dụng là gì? Rủi ro gì nếu tôi luôn sử dụng ToLower()
và rủi ro gì nếu tôi luôn sử dụng ToLowerInvariant()
?
Câu trả lời:
Tùy thuộc vào văn hóa hiện tại, ToLower có thể tạo ra một chữ cái viết thường dành riêng cho văn hóa mà bạn không mong đợi. Chẳng hạn như sản xuất ınfo
mà không có dấu chấm trên i thay vì info
và do đó làm hỏng các so sánh chuỗi. Vì lý do đó, ToLowerInvariant nên được sử dụng trên bất kỳ dữ liệu phi ngôn ngữ cụ thể nào. Khi bạn có thể có đầu vào của người dùng có thể bằng ngôn ngữ / bộ ký tự gốc của họ, thường sẽ là lần duy nhất bạn sử dụng ToLower.
Xem câu hỏi này để biết ví dụ về vấn đề này: C # - ToLower () đôi khi xóa dấu chấm khỏi chữ "I"
Tôi nghĩ rằng điều này có thể hữu ích:
http://msdn.microsoft.com/en-us/l Library / system.opes.tolowerinvariant.aspx
cập nhật
Nếu ứng dụng của bạn phụ thuộc vào trường hợp chuỗi thay đổi theo cách có thể dự đoán được mà không bị ảnh hưởng bởi văn hóa hiện tại, hãy sử dụng phương thức ToLowerInvariant. Phương thức ToLowerInvariant tương đương với ToLower (CultureInfo.InvariantCARM). Phương pháp được khuyến nghị khi tập hợp các chuỗi phải xuất hiện theo thứ tự dự đoán trong điều khiển giao diện người dùng.
cũng thế
... ToLower rất giống với hầu hết các nơi với ToLowerInvariant. Các tài liệu chỉ ra rằng các phương pháp này sẽ chỉ thay đổi hành vi với các nền văn hóa Thổ Nhĩ Kỳ. Ngoài ra, trên các hệ thống Windows, hệ thống tệp không phân biệt chữ hoa chữ thường, điều này làm hạn chế hơn nữa việc sử dụng ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
thứ
String.ToLower()
sử dụng văn hóa mặc định trong khi String.ToLowerInvariant()
sử dụng văn hóa bất biến. Vì vậy, về cơ bản, bạn đang hỏi sự khác biệt giữa văn hóa bất biến và so sánh chuỗi thứ tự .
ToLower
các biến thể; Thông thường so với bất biến chỉ thay đổi "thứ tự sắp xếp" của hai chuỗi, không thay đổi so sánh bằng.
TL; DR:
Khi làm việc với "nội dung" (ví dụ: bài viết, bài đăng, bình luận, tên, địa điểm, v.v.) sử dụng ToLower()
. Khi làm việc với "chữ" (ví dụ: đối số dòng lệnh, ngữ pháp tùy chỉnh, chuỗi nên là enum, v.v.) sử dụng ToLowerInvariant()
.
Ví dụ:
= Sử dụng ToLowerInvariant
không chính xác =
Trong tiếng Thổ Nhĩ Kỳ, DIŞ
có nghĩa là "bên ngoài" và diş
có nghĩa là "răng". Các vỏ dưới thích hợp DIŞ
là dış
. Vì vậy, nếu bạn sử dụng ToLowerInvariant
không chính xác, bạn có thể mắc lỗi chính tả ở Thổ Nhĩ Kỳ.
= Sử dụng ToLower
không chính xác =
Bây giờ giả vờ bạn đang viết một trình phân tích cú pháp SQL. Ở đâu đó bạn sẽ có mã giống như:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
Ngữ pháp SQL không thay đổi khi bạn thay đổi văn hóa. Một người Pháp không viết SÉLECTIONNEZ x DE books
thay vì SELECT X FROM books
. Tuy nhiên, để mã trên hoạt động, một người Thổ Nhĩ Kỳ sẽ cần phải viết SELECT x FROM books WHERE Author LİKE '%Adams%'
(lưu ý dấu chấm phía trên thủ đô i, gần như không thể nhìn thấy). Điều này sẽ khá bực bội cho người dùng Thổ Nhĩ Kỳ của bạn.