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


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

По умолчанию метод String.Compare выполняет сравнение с учетом языка и региона и регистра символов. Этот метод также содержит несколько перегрузок, которые предоставляют параметр culture, позволяющий задать используемый язык и региональные параметры, и параметр comparisonType, позволяющий указать используемые правила сравнения. При вызове этих методов вместо перегрузки по умолчанию удаляется любая неопределенность в отношении правил, используемых при вызове конкретного метода, и четко определяется, учитываются ли при конкретном сравнении язык и региональные параметры.

ПримечаниеПримечание

Обе перегрузки метода String.CompareTo выполняют сравнение с учетом языка и региональных параметров и с учетом регистра; для сравнения без учета языка и региональных параметров этот метод использовать нельзя.Для получения более понятного кода рекомендуется вместо этого метода использовать метод String.Compare.

Для операций с учетом языка и региональных параметров в качестве параметра comparisonType следует указать значение перечисления StringComparison.CurrentCulture или StringComparison.CurrentCultureIgnoreCase. Если требуется выполнить сравнение с учетом языка и региональных параметров, используя назначенный (отличный от текущего) язык и региональные параметры, в качестве параметра culture следует указать объект CultureInfo, представляющий этот язык и региональные параметры.

Поддерживаемые методом String.Compare операции сравнения строк без учета языка и региональных параметров могут быть лингвистическими (выполняемыми на основе правил сортировки инвариантного языка и региональных параметров) или нелингвистическими (выполняемыми на основе порядковых номерах символов в строке). Большинство операций сравнения строк без учета языка и региональных параметров являются нелингвистическими. Для таких операций сравнения в качестве параметра comparisonType следует указать значение перечисления StringComparison.Ordinal или StringComparison.OrdinalIgnoreCase. Например, если решение, влияющее на безопасность (к примеру, сравнение имени пользователя или пароля), принимается на основе результата сравнения строк, операция должна быть нелингвистической и выполняться без учета языка и региональных параметров, чтобы на результат не повлияли правила конкретного языка и региональных параметров. (Пример получения несогласованных результатов при сравнении строк с учетом языка и региональных параметров см. в разделе Настраиваемые правила сопоставления регистра и сортировки).

Если требуется согласованная лингвистическая обработка соответствующих строк из нескольких языков и региональных параметров, следует использовать лингвистическое сравнение строк без учета языка и региональных параметров. Например, если приложение отображает в списке слова, в которых используется несколько кодировок, может потребоваться отображать слова в одном и том же порядке независимо от текущего языка и региональных параметров. Для операций лингвистического сравнения без учета языка и региональных параметров платформа .NET Framework определяет инвариантный язык и региональные параметры на основе операций лингвистического сравнения для английского языка. Для выполнения лингвистического сравнения без учета языка и региональных параметров в качестве параметра comparisonType следует указать StringComparison.InvariantCulture или StringComparison.InvariantCultureIgnoreCase.

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

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        Dim compareResult As Integer

        compareResult = String.Compare(string1, string2, _
                                       StringComparison.Ordinal)   
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult) 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult) 
    End Sub
End Class
' The example displays the following output:
'    Ordinal comparison of 'file' and 'FILE': 32
'    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
using System;

public class CompareSample
{
    public static void Main()
    {
        string string1 = "file";
        string string2 = "FILE";
        int compareResult = 0;

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.Ordinal);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult); 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult); 
    }
}
// The example displays the following output:
//    Ordinal comparison of 'file' and 'FILE': 32
//    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0

См. также

Ссылки

String.Compare

String.CompareTo

Основные понятия

Сравнение и сортировка данных для конкретного языка и региона

Рекомендации по использованию строк в .NET Framework

Другие ресурсы

Выполнение строковых операций, не зависящих от языка и региональных параметров

Журнал изменений

Дата

Журнал

Причина

Май 2010

Пересмотрено с учетом рекомендаций по обработке строк.

Исправление ошибки содержимого.