Что случилось с ToLowerInvariant()?
у меня есть следующий код:
var connectionString = configItems.
Find(item => item.Name.ToLowerInvariant() == "connectionstring");
VS 2010 анализ кода говорит мне следующее:
предупреждение 7 CA1308: Microsoft.Глобализация: в методе ... замените вызов на ' string.ToLowerInvariant () со строкой.ToUpperInvariant().
значит ToUpperInvariant()
надежнее?
2 ответа:
Google дает подсказку, указывающую на CA1308: нормализация строк в верхний регистр
Он говорит:
строки должны быть нормализованы в верхний регистр. Небольшая группа символов, когда они преобразуются в нижний регистр, не может выполнить обратный путь. Выполнение кругового перехода означает преобразование символов из одного языкового стандарта в другой языковой стандарт, представляющий символьные данные по-разному, а затем точное извлечение исходных символов из преобразованного письмена.
Итак, да-ToUpper более надежен, чем ToLower.
в будущем я предлагаю сначала погуглить - я делаю это для всех тех предупреждений FxCop, которые я получаю;) помогает много читать соответствующую документацию;)
помимо того, что говорит TomTom, .net оптимизирован для сравнения строк в верхнем регистре. Таким образом, использование верхнего инварианта теоретически быстрее, чем нижнего инварианта.
Это действительно указано в CLR через C#, как указано в комментариях. Следующая ссылка цитирует эту часть книги. Я не уверен, что это действительно так, так как в MSDN нет ничего, что можно было бы найти в этой теме. В руководстве по сравнению строк на msdn упоминается, что toupperinvariant и tolowerinvariant равны и не предпочитает первое.