Что не так с ToLowerInvariant ()?

У меня есть следующая строка кода:

var connectionString = configItems.
                Find(item => item.Name.ToLowerInvariant() == "connectionstring");

Анализ кода VS 2010 говорит мне следующее:

Предупреждение 7 CA1308: Microsoft. Глобализация: В методе... заменяют вызов для 'строкового представления. ToLowerInvariant ()' со Строкой. ToUpperInvariant ().

Делает это означает ToUpperInvariant() более надежно?

63
задан Otiel 4 December 2011 в 17:30
поделиться

2 ответа

Google дает подсказку, указывающую на CA1308: Normalize strings to uppercase

Там говорится:

Строки должны быть нормализованы к верхнему регистру. Небольшая группа символов, когда они преобразуются в строчный регистр, не может совершить обход. Совершить путешествие туда и обратно означает преобразовать символы из одной локали в другую локаль, которая представляет символьные данные по-другому, а затем точно восстановить исходные символы из преобразованных символов.

Таким образом, да - ToUpper более надежен, чем ToLower.

В будущем я советую сначала погуглить - я делаю это для всех тех предупреждений FxCop, которыми меня забрасывают ;) Очень помогает чтение соответствующей документации ;)

97
ответ дан 24 November 2019 в 16:20
поделиться

Помимо того, что говорит TomTom, .net оптимизирован для сравнения строк в верхнем регистре. Таким образом, использование верхнего инварианта теоретически быстрее, чем нижнего инварианта.

Это действительно указано в CLR через C #, как указано в комментариях. Следующая ссылка цитирует эту часть книги. Я не уверен, что это правда, потому что в MSDN ничего по этой теме нет. В руководстве по сравнению строк на msdn упоминается, что toupperinvariant и tolowerinvariant равны, и не предпочитает первое.

Сравнение строк в C #

21
ответ дан 24 November 2019 в 16:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: