У чому різниця і коли використовувати що? Який ризик, якщо я завжди використовую, ToLower()
і який ризик, якщо я завжди використовую ToLowerInvariant()
?
У чому різниця і коли використовувати що? Який ризик, якщо я завжди використовую, ToLower()
і який ризик, якщо я завжди використовую ToLowerInvariant()
?
Відповіді:
Залежно від нинішньої культури, ToLower може створити маленьку літеру, специфічну для культури, якої ви не очікуєте. Наприклад, створення ınfo
без крапки на i замість цього, info
а також вимикання порівнянь рядків. З цієї причини ToLowerInvariant слід використовувати для будь-яких даних, що не належать до мови. Якщо у вас можуть бути введені користувачем дані, які можуть бути на рідній мові / наборі символів, зазвичай це єдиний раз, коли ви використовуєте ToLower.
Дивіться це питання на прикладі цього питання: C # - ToLower () іноді видаляє крапку з літери "Я"
Я думаю, що це може бути корисно:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
оновлення
Якщо ваш додаток залежить від випадку зміни рядка передбачуваним способом, який не впливає на поточну культуру, використовуйте метод ToLowerInvariant. Метод ToLowerInvariant еквівалентний ToLower (CultureInfo.InvariantCulture). Метод рекомендується, коли колекція рядків повинна з'являтися в передбачуваному порядку в елементі управління користувальницьким інтерфейсом.
також
... ToLower дуже схожий у більшості місць на ToLowerInvariant. Документи вказують, що ці методи змінить поведінку лише з турецькими культурами. Крім того, у системах Windows файлова система нечутлива до регістру, що ще більше обмежує її використання ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
використовує культуру за замовчуванням, тоді як String.ToLowerInvariant()
використовує інваріантну культуру. Отже, ви по суті запитуєте відмінності між інваріантною культурою та порівнянням порядкових рядків .
ToLower
варіантів; Ординальний проти інваріант просто змінює "порядок сортування" двох рядків, не змінює порівняння рівності.
TL; DR:
Під час роботи зі «вмістом» (наприклад, статтями, публікаціями, коментарями, іменами, місцями тощо) використовуйте ToLower()
. Під час роботи з "літералами" (наприклад, аргументи командного рядка, користувацькі граматики, рядки, які мають бути перерахунками тощо) ToLowerInvariant()
.
Приклади:
= Неправильне використанняToLowerInvariant
=
Турецькою DIŞ
означає «зовні» і diş
означає «зуб». Правильний нижній кожух DIŞ
є dış
. Отже, якщо ви ToLowerInvariant
неправильно вживаєте, у вас може виникнути помилки в Туреччині.
= Неправильне використанняToLower
=
Тепер зробіть вигляд, що ви пишете SQL-аналізатор. Десь у вас з’явиться код, який виглядає так:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
Граматика SQL не змінюється при зміні культур. Француз не пише SÉLECTIONNEZ x DE books
замість SELECT X FROM books
. Однак для того, щоб вищезазначений код працював, турецькій людині потрібно було б написати SELECT x FROM books WHERE Author LİKE '%Adams%'
(зверніть увагу на крапку над столицею i, майже неможливо побачити). Це було б дуже неприємно для вашого турецького користувача.