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