Сравнение двух строк, игнорируя регистр в c# [дубликат]




Возможные Дубликаты:
в чем разница между различными методами сравнения строк






какой из двух эффективнее? (Или, может быть, есть третий вариант, который еще лучше?)



string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))


или



if (val.ToLowerCase() == "astringvalue")


?

871   8  

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 чтобы смягчить возможность того, что val null.

первый самый быстрый. Оказывается, что val является неизменяемым,и поэтому новый объект string создается со строкой.ToLowerCase (), а не просто прямое сравнение со строковым компаратором. Создает новый объект String может быть дорогостоящим, если вы делаете это много раз в секунду.

вы также можете посмотреть на этот уже ответленный вопрос различия в методах сравнения строк в C#

1-й является более эффективным (и лучшим возможным вариантом), потому что val.ToLowerCase() создает новый объект, так как строки являются неизменными.

Comments

    Ничего не найдено.