Сравнение двух строк, игнорируя регистр в c# [дубликат]
Возможные Дубликаты:
в чем разница между различными методами сравнения строк
какой из двух эффективнее? (Или, может быть, есть третий вариант, который еще лучше?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
или
if (val.ToLowerCase() == "astringvalue")
?
8 ответов
первый-правильный, а IMHO-более эффективный, так как второе "решение" создает экземпляр новой строки.
Если вы ищете эффективность, используйте этот:
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
порядковые сравнения могут быть значительно быстрее, чем сравнения, учитывающие культуру.
ToLowerCase
может быть лучшим вариантом, если вы делаете много сравнений с той же строкой.
Как и при любой оптимизации производительности: измерить его, а потом решить!
на .ToLowerCase
версия не будет быстрее - она включает в себя дополнительное распределение строк
(которые позже должны быть собраны) и т. д.
лично я использую
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
это позволяет избежать всех вопросов чувствительных к культуре строк, но, как следствие, это избегает всех вопросов чувствительных к культуре строк. Только вы знаете, нормально ли это в вашем контексте.
С помощью string.Equals
статический метод позволяет избежать каких-либо проблем с val
будучи null
.
мой общий ответ на этот вопрос об "эффективности" почти всегда, который когда-либо версия кода является наиболее читаемой, является наиболее эффективным.
это, как говорится, Я думаю (val.ToLowerCase() == "astringvalue")
довольно понятно с первого взгляда большинством людей.
эффективность ссылаюсь на не necesseraly во исполнение кодекса, а в maintanance и вообще читаемость кода в вопрос.
Я бы рискнул, что безопаснее всего использовать String.Equals
чтобы смягчить вероятность того, что val null
.
первый самый быстрый. Оказывается, что val
является неизменяемым, и поэтому новый объект string создается со строкой.ToLowerCase (), а не просто прямое сравнение со строковым компаратором. Создание нового строкового объекта может быть дорогостоящим, если вы делаете это много раз в секунду.
вы также можете посмотреть на этот уже ответивший вопрос различия в методах сравнения строк в C#
1st более эффективен (и лучший возможный вариант), потому что val.ToLowerCase()
создает новый объект, так как строки являются неизменными.