На этой странице пишет комментатор:
Никогда не использовать .ToUpper
обеспечить сравнение строк нечувствительно к регистру.
Вместо этого:
type.Name.ToUpper() == (controllerName.ToUpper() + "Controller".ToUpper()))
Сделайте это:
type.Name.Equals(controllerName + "Controller",
StringComparison.InvariantCultureIgnoreCase)
Почему этот путь предпочтен?
Вот ответ в деталях .. The Turkey Test ( прочтите раздел 3 )
Как обсуждали многие и многие люди , "I" в турецком языке ведет себя иначе, чем в большинстве языков. В соответствии со стандартом Unicode наша строчная буква "i" становится "İ" (U + 0130 {{1 }} «Латинская заглавная буква I с точкой вверху»), когда она переходит в верхний регистр. Точно так же наша заглавная буква «I» становится «ı» (U + 0131 «Latin Строчная буква Dotless I "), когда она переходит в нижний регистр .
Исправление : снова используйте порядковый (необработанный байт) компаратор или инвариантную культуру для сравнений, если вам не требуется лингвистический {{1} } сравнения (которые дают вам прописные I с точками в Турции)
И, согласно Microsoft, вам следует даже не использовать инвариант ... а порядковый номер ... ( Новые рекомендации по использованию Строки в Microsoft .NET 2.0 )
Короче говоря, он оптимизирован CLR (также меньше памяти).
Кроме того, сравнение в верхнем регистре более оптимизировано, чем ToLower (), если эта крошечная степень производительности имеет значение.
В ответ на ваш пример существует более быстрый способ :
String.Equals(type.Name, controllerName + "Controller",
StringComparison.InvariantCultureIgnoreCase);