Каков правильный способ сравнения символов, игнорирующих регистр? ⇐ C#
-
Anonymous
Каков правильный способ сравнения символов, игнорирующих регистр?
Мне интересно, какой правильный способ сравнения двух символов без учета регистра будет работать для всех культур. Кроме того, является ли Comparer.Default лучшим способом проверить два символа, не игнорируя регистр? Работает ли это для суррогатных пар?
EDIT: добавлен пример реализации IComparer
Если это кому-то поможет, я решил использовать именно это
публичный класс CaseInsensivityCharComparer: IComparer { частный только для чтения System.Globalization.CultureInfo ci; public CaseInsensusCharComparer(System.Globalization.CultureInfo ci) { this.ci = ci; } общедоступный CaseInsensitivityCharComparer() : this(System.Globalization.CultureInfo.CurrentCulture) { } public int Compare(char x, char y) { return Char.ToUpper(x, ci) - Char.ToUpper(y, ci); } } // Печатает 3 Console.WriteLine("Это тест".CountChars('t', new CaseInsensusCharComparer()));
Мне интересно, какой правильный способ сравнения двух символов без учета регистра будет работать для всех культур. Кроме того, является ли Comparer.Default лучшим способом проверить два символа, не игнорируя регистр? Работает ли это для суррогатных пар?
EDIT: добавлен пример реализации IComparer
Если это кому-то поможет, я решил использовать именно это
публичный класс CaseInsensivityCharComparer: IComparer { частный только для чтения System.Globalization.CultureInfo ci; public CaseInsensusCharComparer(System.Globalization.CultureInfo ci) { this.ci = ci; } общедоступный CaseInsensitivityCharComparer() : this(System.Globalization.CultureInfo.CurrentCulture) { } public int Compare(char x, char y) { return Char.ToUpper(x, ci) - Char.ToUpper(y, ci); } } // Печатает 3 Console.WriteLine("Это тест".CountChars('t', new CaseInsensusCharComparer()));
Мобильная версия