Сравнение строк: InvariantCultureIgnoreCase по сравнению с OrdinalIgnoreCase? [дубликат]

164
задан RichardTowers 3 November 2015 в 20:17
поделиться

4 ответа

Если вы действительно хотите сопоставить только точку, тогда StringComparison.Ordinal будет самым быстрым, поскольку нет разницы в регистре.

«Порядковый номер» не использует правила языка и / или регистра, которые в любом случае не применимы к символу, подобному . .

40
ответ дан 23 November 2019 в 21:13
поделиться

Кажется, вы сравниваете имена файлов, поэтому я бы просто добавил, что OrdinalIgnoreCase является ближайшим к к тому, что делает NTFS (это не совсем то же самое, но ближе, чем InvariantCultureIgnoreCase )

14
ответ дан 23 November 2019 в 21:13
поделиться

Ни тот, ни другой код не всегда лучше. Они делают разные вещи, поэтому у них разные дела.

InvariantCultureIgnoreCase использует правила сравнения на основе английского языка, но без каких-либо региональных вариаций. Это хорошо для нейтрального сравнения, которое все же учитывает некоторые лингвистические аспекты.

OrdinalIgnoreCase сравнивает коды символов без учета культурных особенностей. Это хорошо для точных сравнений, таких как имена пользователей, но не для сортировки строк с необычными символами, такими как é или ö . Это также быстрее, потому что нет никаких дополнительных правил, которые нужно применить перед сравнением.

233
ответ дан 23 November 2019 в 21:13
поделиться

FXCop обычно предпочитает OrdinalIgnoreCase . Но ваши требования могут отличаться.

Для английского языка разница очень небольшая.Это становится проблемой, когда вы погружаетесь в языки, которые имеют различные письменные языковые конструкции. У меня недостаточно опыта, чтобы дать вам больше.

OrdinalIgnoreCase

StringComparer, возвращаемый свойством OrdinalIgnoreCase, обрабатывает символы в строках для сравнения, как если бы они были преобразованы в верхний регистр с использованием соглашения инвариантного языка и региональных параметров, а затем выполняет простое сравнение байтов , которое не зависит от языка. Это наиболее подходит, когда сравнение строк, которые генерируются программно или при сравнении ресурсов без учета регистра, таких как пути и имена файлов. http://msdn.microsoft. com / en-us / library / system.stringcomparer.ordinalignorecase.aspx

InvariantCultureIgnoreCase

StringComparer, возвращаемый свойством InvariantCultureIgnoreCase , сравнивает строки в лингвистически релевантном способ игнорировать регистр, но он не подходит для отображения в какой-либо культуре. Его основное приложение - упорядочивание строк способом, который будет идентичным для разных культур. http://msdn.microsoft.com/ en-us / library / system.stringcomparer.invariantcultureignorecase.aspx

Инвариантный язык и региональные параметры - это объект CultureInfo, возвращаемый свойством InvariantCulture.

Свойство InvariantCultureIgnoreCase фактически возвращает экземпляр анонимного класса, производного от класса StringComparer.

54
ответ дан 23 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: