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


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

Обновлен: Ноябрь 2007

По умолчанию метод Compare выполняет сравнение с учетом языка и региона и регистра символов. Однако доступна также перегрузка метода String.Compare, позволяющая задать используемый язык и регион с помощью параметра culture. В коде приложения необходимо четко указать, в каких случаях необходимо выполнять сравнение с учетом языка и региона. Для операций с учетом культурной среды необходимо указывать свойство CultureInfo.CurrentCulture в качестве параметра culture. Для операций без учета культурной среды необходимо указывать свойство CultureInfo.InvariantCulture в качестве параметра culture.

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

По умолчанию перегрузки метода String.CompareTo выполняют сравнение с учетом языка и региона, а также регистра символов. Однако не существует перегрузок этого метода, которые бы позволяли проводить сравнения независимо от языка и региона. Для большей понятности кода рекомендуется использовать метод String.Compare вместо того, чтобы определять параметры CultureInfo.CurrentCulture для операций, зависящих от языка и региона, или CultureInfo.InvariantCulture для операций, не зависящих от культурной среды.

Использование метода String.Compare

В следующем примере показывается, как использовать метод String.Compare для сравнения строк string1 и string2 с учетом языка и региона, а также регистра символов. CultureInfo.CurrentCulture передается как параметр culture, показывая, что будут использоваться правила сопоставления регистра и сортировки для CurrentCulture.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

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

Чтобы сделать эти операции не зависящими от языка и региона, необходимо определить CultureInfo.InvariantCulture в качестве параметра culture. Это определение показано в следующем примере.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

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

Imports System
Imports System.Globalization

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        
        Dim compareResult As Integer = String.Compare(string1, string2, _
            False, CultureInfo.InvariantCulture)   
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is _
            {2}", string1, string2, compareResult)
    End Sub
End Class
using System;
using System.Globalization;

public class CompareSample
{
    public static void Main()
    {
        String string1 = "file";
        String string2 = "FILE";

        int compareResult = String.Compare(string1, string2, false, 
        CultureInfo.InvariantCulture);
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is 
            {2}", string1, string2, compareResult);
    }
}

Использование метода String.CompareTo

В следующем примере используется метод String.CompareTo для сравнения строк string1 и string2. По умолчанию это сравнение проводится с учетом языка и региона, а также регистра символов.

Dim compareResult As Integer = string1.CompareTo(string2)
int compareResult = string1.CompareTo(string2);

Поскольку параметр culture не передается явно, приведенный выше пример является неоднозначным. Чтобы четко определить, зависит или нет приложение от языка и региона, в приложении следует заменить метод String.CompareTo методом String.Compare. Если необходимо выполнить сравнение строк string1 и string2 с учетом языка и региона, а также регистра, следует передать CultureInfo.CurrentCulture в качестве параметра culture. Это приводит к тому, что используются правила сопоставления регистра и сортировки для CurrentCulture, как показано в следующем примере.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

Если необходимо выполнить сравнение строк string1 и string2 без учета языка и региона и с учетом регистра, следует передать CultureInfo.InvariantCulture в качестве параметра culture. Это приводит к тому, что используются правила сопоставления регистра и сортировки для InvariantCulture, как показано в следующем примере.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

Полный пример кода, показывающий применение метода String.Compare для получения результатов, не зависящих от языка и региона, см. в разделе Использование метода String.Compare.

См. также

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

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

Ссылки

String.Compare

String.CompareTo

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

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