Выбор ответа Middle Строки обновлено
Как правильно сравнивать строки без учёта регистра
Вопрос
Нужно сравнить идентификаторы (ключи API, имена заголовков) без учёта регистра. Какой способ правильный?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: string.Equals(a, b, StringComparison.OrdinalIgnoreCase). Для технических идентификаторов нужно порядковое сравнение OrdinalIgnoreCase: оно не зависит от культуры и не создаёт новых строк.
Варианты ответа
a.ToLower() == b.ToLower()string.Compare(a, b, true) == 0с текущей культуройstring.Equals(a, b, StringComparison.OrdinalIgnoreCase)правильный ответa.ToUpperInvariant().GetHashCode() == b.ToUpperInvariant().GetHashCode()
Разбор
Для технических идентификаторов нужно порядковое сравнение OrdinalIgnoreCase: оно не зависит от культуры и не создаёт новых строк. ToLower() выделяет две строки и использует текущую культуру: в турецкой культуре "I".ToLower() даёт ı без точки, и сравнение ломается. string.Compare(a, b, true) тоже культурозависим. Совпадение хешей не гарантирует равенство строк.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.