Прочитать на английском

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


StringComparison Перечисление

Определение

Указывает, какой язык, региональные параметры, регистр и правила сортировки должны использовать определенные перегрузки методов Compare(String, String) и Equals(Object).

C#
public enum StringComparison
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum StringComparison
Наследование
StringComparison
Атрибуты

Поля

CurrentCulture 0

Сравнивать строки, используя правила сортировки с учетом языка и региональных параметров и текущий язык и региональные параметры.

CurrentCultureIgnoreCase 1

Сравнивать строки, используя правила сортировки с учетом языка и региональных параметров и текущий язык и региональные параметры без учета регистра сравниваемых строк.

InvariantCulture 2

Сравнивать строки, используя правила сортировки с учетом языка и региональных параметров и инвариантный язык и региональные параметры.

InvariantCultureIgnoreCase 3

Сравнивать строки, используя правила сортировки с учетом языка и региональных параметров и инвариантный язык и региональные параметры без учета регистра сравниваемых строк.

Ordinal 4

Сравнивать строки, используя правила обычной (двоичной) сортировки.

OrdinalIgnoreCase 5

Сравнивать строки, используя правила обычной (двоичной) сортировки без учета регистра сравниваемых строк.

Примеры

В следующем примере сравниваются три набора строк с использованием каждого элемента перечисления StringComparison . В сравнениях используются соглашения английского языка (США), тайского (Таиланда) и турецкого языка (Турция). Обратите внимание, что строки "a" и "a-" считаются эквивалентными в языке "th-TH", но не в других, а "i" и "İ" считаются эквивалентными в языке и региональных параметрах "tr-TR", если регистр игнорируется, но не в других языках и региональных параметрах.

C#
using System;
using System.Globalization;
using System.Threading;

public class Example3
{
    public static void Main()
    {
        String[] cultureNames = { "en-US", "th-TH", "tr-TR" };
        String[] strings1 = { "a", "i", "case", };
        String[] strings2 = { "a-", "\u0130", "Case" };
        StringComparison[] comparisons = (StringComparison[])Enum.GetValues(typeof(StringComparison));

        foreach (var cultureName in cultureNames)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
            Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name);
            for (int ctr = 0; ctr <= strings1.GetUpperBound(0); ctr++)
            {
                foreach (var comparison in comparisons)
                    Console.WriteLine("   {0} = {1} ({2}): {3}", strings1[ctr],
                                      strings2[ctr], comparison,
                                      String.Equals(strings1[ctr], strings2[ctr], comparison));

                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}
// The example displays the following output:
//    Current Culture: en-US
//       a = a- (CurrentCulture): False
//       a = a- (CurrentCultureIgnoreCase): False
//       a = a- (InvariantCulture): False
//       a = a- (InvariantCultureIgnoreCase): False
//       a = a- (Ordinal): False
//       a = a- (OrdinalIgnoreCase): False
//
//       i = İ (CurrentCulture): False
//       i = İ (CurrentCultureIgnoreCase): False
//       i = İ (InvariantCulture): False
//       i = İ (InvariantCultureIgnoreCase): False
//       i = İ (Ordinal): False
//       i = İ (OrdinalIgnoreCase): False
//
//       case = Case (CurrentCulture): False
//       case = Case (CurrentCultureIgnoreCase): True
//       case = Case (InvariantCulture): False
//       case = Case (InvariantCultureIgnoreCase): True
//       case = Case (Ordinal): False
//       case = Case (OrdinalIgnoreCase): True
//
//
//    Current Culture: th-TH
//       a = a- (CurrentCulture): True
//       a = a- (CurrentCultureIgnoreCase): True
//       a = a- (InvariantCulture): False
//       a = a- (InvariantCultureIgnoreCase): False
//       a = a- (Ordinal): False
//       a = a- (OrdinalIgnoreCase): False
//
//       i = İ (CurrentCulture): False
//       i = İ (CurrentCultureIgnoreCase): False
//       i = İ (InvariantCulture): False
//       i = İ (InvariantCultureIgnoreCase): False
//       i = İ (Ordinal): False
//       i = İ (OrdinalIgnoreCase): False
//
//       case = Case (CurrentCulture): False
//       case = Case (CurrentCultureIgnoreCase): True
//       case = Case (InvariantCulture): False
//       case = Case (InvariantCultureIgnoreCase): True
//       case = Case (Ordinal): False
//       case = Case (OrdinalIgnoreCase): True
//
//
//    Current Culture: tr-TR
//       a = a- (CurrentCulture): False
//       a = a- (CurrentCultureIgnoreCase): False
//       a = a- (InvariantCulture): False
//       a = a- (InvariantCultureIgnoreCase): False
//       a = a- (Ordinal): False
//       a = a- (OrdinalIgnoreCase): False
//
//       i = İ (CurrentCulture): False
//       i = İ (CurrentCultureIgnoreCase): True
//       i = İ (InvariantCulture): False
//       i = İ (InvariantCultureIgnoreCase): False
//       i = İ (Ordinal): False
//       i = İ (OrdinalIgnoreCase): False
//
//       case = Case (CurrentCulture): False
//       case = Case (CurrentCultureIgnoreCase): True
//       case = Case (InvariantCulture): False
//       case = Case (InvariantCultureIgnoreCase): True
//       case = Case (Ordinal): False
//       case = Case (OrdinalIgnoreCase): True

Комментарии

Перечисление StringComparison используется для указания того, должно ли сравнение строк использовать текущий язык и региональные параметры или инвариантные региональные параметры, правила сортировки слов или порядковых номеров, а также учитывать регистр или регистр без учета регистра.

Важно!

При вызове метода сравнения строк, например String.Compare, String.Equalsили String.IndexOf, всегда следует вызывать перегрузку, содержащую параметр типа StringComparison , чтобы можно было указать тип сравнения, выполняемого методом. Дополнительные сведения см. в разделе Рекомендации по использованию строк.

Операция, использующая правила сортировки слов, выполняет сравнение с учетом языка и региональных параметров, при котором некоторые символы юникода, не являющиеся цифрами, могут иметь специальные весовые коэффициенты, назначенные им. Использование правил сортировки слов и соглашений определенного языка и региональных параметров дефис ("-") может иметь очень небольшой вес, назначенный ему, чтобы "coop" и "co-op" отображались рядом друг с другом в отсортированный список.

Примечание

.NET Core работает только в системах Linux и macOS: Поведение параметров сортировки для языков и региональных параметров в C и POSIX всегда учитывает регистр, так как эти культуры не используют ожидаемый порядок сортировки в Юникоде. Мы не рекомендуем использовать язык и региональные параметры, выбранные для C или Posix, для выполнения операций сортировки с учетом языка и региональных параметров, но без учета регистра.

Операция, использующая правила порядковой сортировки, выполняет сравнение на основе числового значения (кодовая точка Юникода) каждой Char строки. Порядковое сравнение быстро, но без учета языка и региональных параметров. При использовании правил порядковой сортировки для сортировки строк, начинающихся с символов Юникода (U+), строка U+xxxx приходит перед строкой U+yyyy, если значение xxxx числовое значение меньше yy.

Дополнительные сведения о сравнениях см. в примечаниях System.String класса. Дополнительные сведения о языке и региональных параметрах см. в примечаниях к классу System.Globalization.CultureInfo . Рекомендации по использованию правил сравнения с порядковым номером или языком и региональными параметрами или правилами инвариантного языка и региональных параметров см. в рекомендациях по использованию строк. Набор текстовых файлов, содержащих сведения о весах символов, используемых в операциях сортировки и сравнения для Windows операционных систем, см. в разделе "Сортировка весовых таблиц". Таблицу веса сортировки для Linux и macOS см. в таблице элементов сортировки Юникода по умолчанию.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел