chuỗi.ToLower () và chuỗi.ToLowerInvariant ()


Câu trả lời:


148

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 ınfomà không có dấu chấm trên i thay vì infovà 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"


45

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ứ


@danyolgiax Xin vui lòng giải thích thêm? Không thể suy ra tính hữu dụng của nó từ liên kết của msd. Cảm ơn
Prerak K

2
có ToLowerInvariant không hoạt động ở Thổ Nhĩ Kỳ như mong đợi. Tôi trở thành
MonsterMMORPG

28

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ự .


Không, anh ấy không có. "Thông thường" là một lựa chọn thứ ba - một cách hơi khác để "bỏ qua" văn hóa hiện tại. Sự khác biệt không liên quan trong việc thảo luận về ToLowercá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.
ToolmakerSteve

27

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 ToLowerInvariantkhô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Şdış. Vì vậy, nếu bạn sử dụng ToLowerInvariantkhông chính xác, bạn có thể mắc lỗi chính tả ở Thổ Nhĩ Kỳ.

= Sử dụng ToLowerkhô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 booksthay 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.