В зависимости от текущей культуры ToLower может выдавать строчную букву конкретной культуры, которую вы не ожидаете. Такие как создание ınfoбез точки на i вместо infoи, таким образом, запутывание сравнений строк. По этой причине ToLowerInvariant следует использовать для любых данных, не зависящих от языка. Когда у вас может быть пользовательский ввод, который может быть на их родном языке / наборе символов, как правило, это единственный раз, когда вы используете ToLower.
Если ваше приложение зависит от случая, когда строка изменяется предсказуемым образом, на который не влияет текущая культура, используйте метод ToLowerInvariant. Метод ToLowerInvariant эквивалентен методу ToLower (CultureInfo.InvariantCulture). Этот метод рекомендуется, когда коллекция строк должна отображаться в предсказуемом порядке в элементе управления пользовательского интерфейса.
также
... ToLower очень похож в большинстве мест на ToLowerInvariant. Документы указывают, что эти методы только изменят поведение с турецкими культурами. Кроме того, в системах Windows файловая система нечувствительна к регистру, что еще больше ограничивает ее использование ...
Нет, он не «Порядковый» - это третий вариант - немного другой способ «игнорировать» текущую культуру. Различие не актуально при обсуждении ToLowerвариантов; Порядковый и инвариантный только изменяет «порядок сортировки» двух строк, не меняет сравнение на равенство.
ToolmakerSteve
28
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, которую почти невозможно увидеть). Это было бы довольно сложно для вашего турецкого пользователя.
Ответы:
В зависимости от текущей культуры ToLower может выдавать строчную букву конкретной культуры, которую вы не ожидаете. Такие как создание
ınfo
без точки на i вместоinfo
и, таким образом, запутывание сравнений строк. По этой причине ToLowerInvariant следует использовать для любых данных, не зависящих от языка. Когда у вас может быть пользовательский ввод, который может быть на их родном языке / наборе символов, как правило, это единственный раз, когда вы используете ToLower.Посмотрите этот вопрос для примера этой проблемы: C # - ToLower () иногда удаляет точку из буквы «I»
источник
Я думаю, что это может быть полезно:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
Обновить
также
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
НТН
источник
String.ToLower()
использует культуру по умолчанию, в то время какString.ToLowerInvariant()
использует инвариантную культуру. Таким образом, вы по сути спрашиваете разницу между инвариантной культурой и порядковым сравнением строк .источник
ToLower
вариантов; Порядковый и инвариантный только изменяет «порядок сортировки» двух строк, не меняет сравнение на равенство.TL; DR:
При работе с «контентом» (например, статьями, постами, комментариями, именами, местами и т. Д.) Используйте
ToLower()
. При работе с «литералами» (например, аргументы командной строки, пользовательские грамматики, строки, которые должны быть перечислениями и т. Д.) ИспользуйтеToLowerInvariant()
.Примеры:
= Использование
ToLowerInvariant
неправильно =В
DIŞ
переводе с турецкого означает «снаружи» иdiş
означает «зуб». Правильный нижний кожухDIŞ
естьdış
. Итак, если вы используетеToLowerInvariant
неправильно, вы можете иметь опечатки в Турции.= Использование
ToLower
неправильно =Теперь представьте, что вы пишете анализатор SQL. Где-то у вас будет код, который выглядит следующим образом:
Грамматика SQL не меняется при изменении культур. Француз не пишет
SÉLECTIONNEZ x DE books
вместоSELECT X FROM books
. Однако для того, чтобы вышеприведенный код работал, турецкому человеку нужно было бы написатьSELECT x FROM books WHERE Author LİKE '%Adams%'
(обратите внимание на точку над заглавной буквой i, которую почти невозможно увидеть). Это было бы довольно сложно для вашего турецкого пользователя.источник