11 августа 2014 г.

Частая ошибка №3: Использование неподходящих или неопределенных методов сравнения строк. Перевод.

Существует множество различных способов сравнивать строки в C#.

Хотя многие программисты используют оператор == для сравнения строк, на самом деле это один из наименее желательных методов для этого, в первую очередь потому что он не позволяет явным образом в коде указать какой тип сравнения необходим.
Пожалуй более предпочтительным способом проверить равенство строк в C# будет использовать метод Equals:


Первое определение метода (т.е. без параметра comparisonType) в общем-то тоже самое что и использование оператора ==, но обладает преимуществом в виде явного применения к строкам. Он выполняет порядковое сравнение строк, которое в общем-то является побайтовым сравнением. Во многих случаях это именно тот тип сравнения, который вам нужен, особенно если значение сравниваемых строк устанавливается программно, например имена файлов, значения переменных среды, атрибуты и т.п. В таких случаях, до тех пор пока порядковое сравнение это действительно правильный тип сравнения, единственный недостаток использования метода Equals без comparisonType - это то, что кто-то, читая этот код, может не знать о типе сравнения, который вы делаете.
Использование метода Equals, включающего comparisonType, каждый раз когда вы сравниваете строки не только сделает ваш код более понятным, но и заставит вас явно думать о типе сравнения, который вам нужно сделать. Это очень важно делать, поскольку даже если английский язык не имеет особых различий между порядковым сравнением и сравнением с учетом региональных параметров, другие языки могут иметь их много, и игнорируя эти возможности вы открываете себя для многих потенциальных ошибок в будущем. Например:


Наиболее безопасный путь - всегда передавать аргумент comparisonType в метод Equals. Вот некоторые базовые принципы:
  • При сравнении строк, которые были введены пользователем или должны отображаться для пользователя используйте сравнение с учетом региональных параметров (CurrentCulture или CurrentCultureIgnoreCase);
  • При сравнении программных строк, используйте порядковое сравнение (Ordinal или OrdinalIgnoreCase);
  • InvariantCulture и InvariantCultureIgnoreCase как правило не используются, кроме очень ограниченных обстоятельств, т.к. порядковое сравнение более эффективно. Если сравнение с учетом региональных параметров должны быть выполнено, как правило оно выполняется с учетом текущих, либо указанных региональных параметров.
В дополнение к методу Equals, класс String так же предоставляет метод Compare, который дает вам информацию об относительном порядке строк вместо простой их проверки на равность. Этот метод предпочтительнее чем операторы <, <=, > и >= по тем же причинам, которые описаны выше.

Частая ошибка №4: Использование итеративных (вместо декларативных) выражений для работы с коллекциями
Оригинал

Комментариев нет:

Отправить комментарий