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