Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Страница 61
string s1 = "Hello!";
string s2 = "Yo!";
Console.WriteLine("s1 = {0}", s1);
Console.WriteLine("s2 = {0}", s2);
Console.WriteLine();
// Проверить строки на равенство.
Console.WriteLine("s1 == s2: {0}", s1 == s2);
Console.WriteLine("s1 == Hello!: {0}", s1 == "Hello!");
Console.WriteLine("s1 == HELLO!: {0}", s1 == "HELLO!");
Console.WriteLine("s1 == hello!: {0}", s1 == "hello!");
Console.WriteLine("s1.Equals(s2): {0}", s1.Equals(s2));
Console.WriteLine("Yo!.Equals(s2): {0}", "Yo!".Equals(s2));
Console.WriteLine();
}
Операции равенства C# выполняют в отношении объектов
string
"Hello!"
"HELLO!"
"hello!"
string
System.String
Equals()
String
"Yo!"
System.String
Модификация поведения сравнения строк
Как уже упоминалось, операции равенства строк (
Compare()
Equals()
==
IndexOf()
if (firstString.ToUpper() == secondString.ToUpper())
{
// Делать что-то
}
Здесь создается копия каждой строки со всеми символами верхнего регистра. В большинстве ситуаций это не проблема, но в случае очень крупных строк может пострадать производительность. И дело даже не производительности — написание каждый раз такого кода преобразования становится утомительным. А что, если вы забудете вызвать
ToUpper()
Гораздо лучший прием предусматривает применение перегруженных версий перечисленных ранее методов, которые принимают значение перечисления
StringComparison
StringComparison
Чтобы взглянуть на результаты применения
StringComparison
StringEqualitySpecifyingCompareRules()
static void StringEqualitySpecifyingCompareRules()
{
Console.WriteLine("=> String equality (Case Insensitive:");
string s1 = "Hello!";
string s2 = "HELLO!";
Console.WriteLine("s1 = {0}", s1);
Console.WriteLine("s2 = {0}", s2);
Console.WriteLine();
// Проверить результаты изменения стандартных правил сравнения.
Console.WriteLine("Default rules: s1={0},s2={1}s1.Equals(s2): {2}",
s1, s2,
s1.Equals(s2));
Console.WriteLine("Ignore case: s1.Equals(s2,
StringComparison.OrdinalIgnoreCase): {0}",
s1.Equals(s2, StringComparison.OrdinalIgnoreCase));
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));