посимвольную проверку равенства с учетом регистра и нечувствительную к культуре. Следовательно, строка
"Hello!"
не равна строке
"HELLO!"
и также отличается от строки
"hello!"
. Кроме того, памятуя о связи между
string
и
System.String
, проверку на предмет равенства можно осуществлять с использованием метода
Equals
класса
String
и других поддерживаемых им операций равенства. Наконец, поскольку каждый строковый литерал (такой как
"Yo!"
) является допустимым экземпляром
System.String
, доступ к функциональности, ориентированной на работу со строками, можно получать для фиксированной последовательности символов.
Модификация поведения сравнения строк
Как уже упоминалось, операции равенства строк (
Compare
,
Equals
и
==
), а также функция
IndexOf
по умолчанию чувствительны к регистру символов и нечувствительны к культуре. Если ваша программа не заботится о регистре символов, тогда может возникнуть проблема. Один из способов ее преодоления предполагает преобразование строк в верхний или нижний регистр с последующим их сравнением:
if (firstString.ToUpper == secondString.ToUpper)
{
// Делать что-то
}
Здесь создается копия каждой строки со всеми символами верхнего регистра. В большинстве ситуаций это не проблема, но в случае очень крупных строк может пострадать производительность. И дело даже не производительности — написание каждый раз такого кода преобразования становится утомительным. А что, если вы забудете вызвать
ToUpper
? Результатом будет трудная в обнаружении ошибка.
Гораздо лучший прием предусматривает применение перегруженных версий перечисленных ранее методов, которые принимают значение перечисления
В то время как приведенные здесь примеры просты и используют те же самые буквы в большинстве культур, если ваше приложение должно принимать во внимание разные наборы культур, тогда применение перечисления
StringComparison
становится обязательным.
Строки неизменяемы
Один из интересных аспектов класса
System.String
связан с тем, что после присваивания объекту string начального значения символьные данные не могут быть изменены. На первый взгляд это может показаться противоречащим действительности, ведь строкам постоянно присваиваются новые значения, а в классе
System.String
доступен набор методов, которые, похоже, только то и делают, что изменяют символьные данные тем или иным образом (скажем, преобразуя их в верхний или нижний регистр). Тем не менее, присмотревшись внимательнее к тому, что происходит "за кулисами", вы заметите, что методы типа