Console.WriteLine("Ignore case, Invariant Culture: s1.Equals(s2,
StringComparison.
InvariantCultureIgnoreCase): {0}", s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase));
Console.WriteLine;
Console.WriteLine("Default rules: s1={0},s2={1} s1.IndexOf(\"E\"): {2}",
s1, s2,
s1.IndexOf("E")); Console.WriteLine("Ignore case: s1.IndexOf(\"E\",
StringComparison.OrdinalIgnoreCase):
{0}", s1.IndexOf("E",
StringComparison.OrdinalIgnoreCase));
Console.WriteLine("Ignore case, Invariant Culture: s1.IndexOf(\"E\",
StringComparison.
InvariantCultureIgnoreCase): {0}", s1.IndexOf("E", StringComparison.InvariantCultureIgnoreCase));
Console.WriteLine;
}
В то время как приведенные здесь примеры просты и используют те же самые буквы в большинстве культур, если ваше приложение должно принимать во внимание разные наборы культур, тогда применение перечисления StringComparison
Строки неизменяемы
Один из интересных аспектов класса System.String
System.String доступен набор методов, которые, похоже, только то и делают, что изменяют символьные данные тем или иным образом (скажем, преобразуя их в верхний или нижний регистр). Тем не менее, присмотревшись внимательнее к тому, что происходит "за кулисами", вы заметите, что методы типа string на самом деле возвращают новый объект string в модифицированном виде:static void StringsAreImmutable
{
Console.WriteLine("=> Immutable Strings:\a");
// Установить начальное значение для строки.
string s1 = "This is my string.";
Console.WriteLine("s1 = {0}", s1);
// Преобразована ли строка si в верхний регистр?
string upperString = s1.ToUpper;
Console.WriteLine("upperString = {0}", upperString);
// Нет! Строка si осталась в том же виде!
Console.WriteLine("s1 = {0}", s1);
}
Просмотрев показанный далее вывод, можно убедиться, что в результате вызова метода ToUpper
string(s1) не преобразовывался в верхний регистр. Взамен была возвращена string в измененном формате.s1 = This is my string.
upperString = THIS IS MY STRING.
s1 = This is my string.
Тот же самый закон неизменяемости строк действует и в случае применения операции присваивания С#. Чтобы проиллюстрировать, реализуем следующий метод StringsAreImmutable2
static void StringsAreImmutable2
{
Console.WriteLine("=> Immutable Strings 2:\a");
string s2 = "My other string";
s2 = "New string value";
}
Скомпилируйте приложение и запустите ildasm.exe
StringsAreImmutable2:.method private hidebysig static void StringsAreImmutable2 cil managed
{
// Code size 21 (0x15)
.maxstack 1
.locals init (string V_0)
IL_0000: nop
IL_0001: ldstr "My other string"
IL_0006: stloc.0
IL_0007: ldstr "New string value" /* 70000B3B */
IL_000c: stloc.0
IL_000d: ldloc.0
IL_0013: nop
IL_0014: ret
} // end of method Program::StringsAreImmutable2
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT