Сравнение строк без учета языка и региональных параметров
По умолчанию метод String.Compare выполняет сравнение с учетом языка и региона и регистра символов. Этот метод также содержит несколько перегрузок, которые предоставляют параметр culture
, позволяющий задать используемый язык и региональные параметры, и параметр comparisonType
, позволяющий указать используемые правила сравнения. При вызове этих методов вместо перегрузки по умолчанию удаляется любая неопределенность в отношении правил, используемых при вызове конкретного метода, и четко определяется, учитываются ли при конкретном сравнении язык и региональные параметры.
Примечание.
Обе перегрузки метода String.CompareTo выполняют сравнение с учетом языка и региональных параметров и с учетом регистра; для сравнения без учета языка и региональных параметров этот метод использовать нельзя. Для получения более понятного кода рекомендуется вместо этого метода использовать метод String.Compare.
Для операций с учетом языка и региональных параметров в качестве параметра StringComparison.CurrentCulture следует указать значение перечисления StringComparison.CurrentCultureIgnoreCase или comparisonType
. Чтобы выполнить сравнение с учетом языка и региональных параметров, используя назначенный (отличный от текущего) язык и региональные параметры, в качестве параметра CultureInfo следует указать объект culture
, представляющий этот язык и региональные параметры.
Поддерживаемые методом String.Compare операции сравнения строк без учета языка и региональных параметров могут быть лингвистическими (выполняемыми на основе правил сортировки инвариантного языка и региональных параметров) или нелингвистическими (выполняемыми на основе порядковых номерах символов в строке). Большинство операций сравнения строк без учета языка и региональных параметров являются нелингвистическими. Для таких операций сравнения в качестве параметра StringComparison.Ordinal следует указать значение перечисления StringComparison.OrdinalIgnoreCase или comparisonType
. Например, если решение, влияющее на безопасность (к примеру, сравнение имени пользователя или пароля), принимается на основе результата сравнения строк, операция должна быть нелингвистической и выполняться без учета языка и региональных параметров, чтобы на результат не повлияли правила конкретного языка и региональных параметров.
Если требуется согласованная лингвистическая обработка соответствующих строк из нескольких языков и региональных параметров, следует использовать лингвистическое сравнение строк без учета языка и региональных параметров. Например, если приложение отображает в списке слова, в которых используется несколько кодировок, может потребоваться отображать слова в одном и том же порядке независимо от текущего языка и региональных параметров. Для операций лингвистического сравнения без учета языка и региональных параметров .NET определяет инвариантный язык и региональные параметры на основе операций лингвистического сравнения для английского языка. Для выполнения лингвистического сравнения без учета языка и региональных параметров в качестве параметра StringComparison.InvariantCulture следует указать StringComparison.InvariantCultureIgnoreCase или comparisonType
.
В следующем примере выполняется два нелингвистических сравнения строк без учета языка и региональных параметров. В первом сравнении учитывается регистр, а во втором — нет.
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
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
Можно скачать таблицы коэффициентов сортировки — набор текстовых файлов, которые содержат сведения о весовых коэффициентах символов, используемых в операциях сортировки и сравнения для операционных систем Windows, а также таблицу параметров сортировки по умолчанию для элементов Юникод — таблицу весовых коэффициентов сортировки для Linux и macOS.