Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
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!"stringSystem.StringEquals()String"Yo!"System.StringМодификация поведения сравнения строк
Как уже упоминалось, операции равенства строк (
Compare()Equals()==IndexOf()if (firstString.ToUpper() == secondString.ToUpper()){ // Делать что-то}Здесь создается копия каждой строки со всеми символами верхнего регистра. В большинстве ситуаций это не проблема, но в случае очень крупных строк может пострадать производительность. И дело даже не производительности — написание каждый раз такого кода преобразования становится утомительным. А что, если вы забудете вызвать
ToUpper()Гораздо лучший прием предусматривает применение перегруженных версий перечисленных ранее методов, которые принимают значение перечисления
StringComparisonStringComparison
Чтобы взглянуть на результаты применения
StringComparisonStringEqualitySpecifyingCompareRules()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));