Сравнение строк - strA.ToLower () == strB.ToLower () или strA.Equals (strB, StringComparisonType)?

У Jeff Atwood есть великое статья о реестре Windows и почему лучше для использования.INI файлов вместо этого.

Моя жизнь была бы чертовски много легче, если бы на параметры настройки приложения были сохранены в месте, то я мог бы легко видеть их, управлять ими и создать резервную копию их. Как, скажите... в файлах INI.

  • реестр единая точка отказа . Вот почему каждый реестр, редактируя подсказку, которую Вы будете когда-либо находить, запускается с большой кричащей правовой оговорки о том, как можно повредить компьютер с regedit.
  • реестр непрозрачен и двоичный . Так, как мне не нравится налог угловой скобки, по крайней мере, файлы конфигурации XML довольно человекочитаемы, и они позволяют столько комментариев, сколько Вы считаете целесообразным.
  • реестр должен быть в синхронизации с файловой системой . Удалите приложение, не "удаляя" его, и Вас оставляют с устаревшим хламом реестра. Или если приложение имеет плохо записанный деинсталлятор. Файловая система больше не является оператором записи - это должно быть сохранено в синхронизации с реестром так или иначе. Это - общее нарушение принципа DRY.
  • реестр монолитный . Скажем, Вы хотели переместить приложение в различный путь на Вашей машине, или даже к различной машине в целом. Удача, извлекающая соответствующие настройки для той конкретное приложение из гигантского реестра tarball. Данному приложению обычно разбрасывали десятки настроек на всем протяжении реестра.

11
задан skaffman 2 November 2009 в 09:43
поделиться

3 ответа

Вы не указали платформу, но я предполагаю .NET. Я настоятельно рекомендую вам использовать вторую форму, потому что сравнение случаев не так просто, как вы могли ожидать. (Это также позволяет избежать создания дополнительных строк, но это другое дело.)

Например, что вы хотите, чтобы ваш код делал, когда он отображается как «mail» и «MAIL», когда он работает в Турции? Если вы используете ToLower , он вернет false, и аналогично, если вы используете CurrentCultureIgnoreCase - но если вы используете InvariantCultureIgnoreCase , он вернет true. Вам необходимо подумать об источнике данных и о том, чего вы пытаетесь достичь с их помощью.

См. рекомендации по использованию строк в MSDN для получения дополнительной информации и рекомендаций.

Помимо всего остального. , Я бы сказал, что последнее более эффективно выражает ваши намерения. На самом деле вас не интересуют строчные значения строк - вас интересует равенство без учета регистра способом ... что именно выражает вторая форма .

33
ответ дан 3 December 2019 в 01:29
поделиться

Вызов Equals масштабируется лучше, так как это одна строковая операция вместо трех.

Лучшую производительность для сравнения с нечувствительностью к регистру можно получить с помощью параметра StringComparison.OrdinalIgnoreCase . Однако, поскольку он не учитывает культурные различия, он не всегда может дать желаемый результат.

Если вы хотите изменить регистр для сравнения, рекомендуется использовать ToUpper вместо ] ToLower . Некоторые экзотические буквы не преобразуются должным образом из верхнего в нижний регистр, но преобразование из нижнего в верхний регистр работает.

В большинстве случаев производительность не имеет решающего значения, поэтому вам следует использовать альтернативу, которая имеет наибольший смысл в данной ситуации.

1221] У тебя нет t указывает, какой язык вы используете, но с помощью оператора == он выглядит как C #. Если вы будете использовать VB, вы должны учитывать, что оператор = не использует оператор равенства строкового класса, а использует собственную логику VB для выполнения сравнений, которая немного отличается.

7
ответ дан 3 December 2019 в 01:29
поделиться

Мне удобнее пользоваться вторым, чем первым. Потому что второй тип будет поддерживаться на всех языках и им будет удобнее пользоваться.

0
ответ дан 3 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: