Что случилось с ToLowerInvariant()?


у меня есть следующий код:

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

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

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

значит ToUpperInvariant() надежнее?

2 53

2 ответа:

Google дает подсказку, указывающую на CA1308: нормализация строк в верхний регистр

Он говорит:

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

Итак, да-ToUpper более надежен, чем ToLower.

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

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

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

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