Поделиться через


Класс CompareInfo

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Конвенции о сравнении и сортировке данных варьируются в зависимости от культуры. Например, порядок сортировки может зависеть от фонетики или визуального представления символов. В восточноазиатских языках иероглифы сортируются по росчерку и радикалу. Сортировка также зависит от порядка алфавита, используемого в различных языках и культурах. Например, датский язык имеет символ "Æ", который сортируется после "Z" в алфавите. Кроме того, сравнения могут быть чувствительными к регистру или нечувствительными к регистру, а правила регистра могут различаться в зависимости от культурных особенностей. Класс CompareInfo отвечает за поддержание данных для сравнения строк с учетом культурных особенностей и выполнение операций с учетом этих особенностей.

Как правило, не нужно создавать экземпляр CompareInfo объекта напрямую, так как он используется неявно всеми операциями сравнения строк без порядкового номера, включая вызовы String.Compare метода. Однако если вы хотите получить CompareInfo объект, это можно сделать одним из следующих способов:

  • Извлекая значение свойства для определенной культуры.

  • Вызывая статический GetCompareInfo метод с именем культуры. Это позволяет получить доступ к объекту с поздней привязкой CompareInfo .

Игнорированные значения поиска

Наборы символов включают игнорируемые символы, которые не учитываются при выполнении лингвистического или учитывающего культуру сравнения. Такие методы сравнения, как IndexOf и LastIndexOf не учитывают такие символы при выполнении сравнения с учетом языка и региональных параметров. Игнорируемые символы включают:

  • String.Empty. Методы сравнения, учитывающие культурные особенности, всегда будут находить пустую строку в начале (индексе ноль) строки для поиска.

  • Символ или строка, состоящая из символов с кодовыми точками, которые исключаются из операции из-за параметров сравнения. В частности, параметры CompareOptions.IgnoreNonSpace и CompareOptions.IgnoreSymbols создают поиск, в котором символы и неразделимые составные символы игнорируются.

  • Строка с точками кода, не имеющими лингвистического значения. Например, мягкий дефис (U+00AD) всегда игнорируется в сравнении строк с учетом языка и региональных параметров.

Вопросы безопасности

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

Замечание

По возможности следует использовать методы сравнения строк, имеющие параметр типа CompareOptions , чтобы указать ожидаемый тип сравнения. В качестве общего правила используйте языковые параметры (с использованием текущего языка и региональных параметров) для сравнения строк, отображаемых в пользовательском интерфейсе, и укажите Ordinal или OrdinalIgnoreCase для безопасных сравнений.