Wykonywanie porównań ciągów bez uwzględniania kultury

Domyślnie String.Compare metoda wykonuje porównania wrażliwe na kulturę i wielkość liter. Ta metoda zawiera również kilka przeciążeń, które zapewniają culture parametr, który umożliwia określenie kultury do użycia, oraz comparisonType parametr, który umożliwia określenie reguł porównania do użycia. Wywoływanie tych metod zamiast przeciążenia domyślnego usuwa wszelkie niejednoznaczności dotyczące reguł używanych w wywołaniu określonej metody i jednoznacznie wskazuje, czy w danym porównaniu jest uwzględniana kultura, czy nie.

Uwaga

Oba przeciążenia String.CompareTo metody wykonują porównania wrażliwe na kulturę i wielkość liter. Nie można użyć tej metody do przeprowadzania porównań bez uwzględniania kultury. W celu zapewnienia przejrzystości kodu zalecamy użycie String.Compare metody .

W przypadku operacji wrażliwych na kulturę StringComparison.CurrentCulture określ wartość wyliczenia lub StringComparison.CurrentCultureIgnoreCase jako comparisonType parametr . Jeśli chcesz przeprowadzić porównanie wrażliwe na kulturę przy użyciu wyznaczonej kultury innej niż bieżąca kultura, określ CultureInfo obiekt reprezentujący tę kulturę culture jako parametr.

Porównania ciągów niewrażliwych na kulturę obsługiwane przez String.Compare metodę to język (na podstawie konwencji sortowania niezmiennej kultury) lub nielingwistyczny (na podstawie wartości porządkowej znaków w ciągu). Porównania nielingwistyczne stanowią większość pośród porównań ciągów, w których nie jest uwzględniana kultura. W przypadku tych porównań określ StringComparison.Ordinal wartość wyliczenia lub StringComparison.OrdinalIgnoreCase jako comparisonType parametr . Na przykład jeśli decyzja dotycząca zabezpieczeń (taka jak porównywanie nazwy użytkownika lub hasła) jest podejmowana na podstawie porównania ciągów, w operacji nie powinna być uwzględniana kultura, a operacja powinna być nielingwistyczna, dzięki czemu konwencje dotyczące określonej kultury lub języka nie będą miały wpływu na wynik.

Lingwistycznych porównań ciągów, w których nie jest uwzględniana kultura, należy używać w sytuacji, gdy trzeba w spójny sposób obsługiwać lingwistycznie podobne ciągi z różnych kultur. Na przykład jeśli w aplikacji w polu listy są wyświetlane wyrazy, w których jest używanych wiele zestawów znaków, warto wyświetlać te wyrazy w takiej samej kolejności, niezależnie od bieżącej kultury. W przypadku porównań językowych niewrażliwych na kulturę platforma .NET definiuje niezmienną kulturę opartą na konwencjach językowych języka angielskiego. Aby przeprowadzić porównanie językowe bez uwzględniania kultury, określ StringComparison.InvariantCulture parametr lub StringComparison.InvariantCultureIgnoreCase jako comparisonType parametr.

W poniższym przykładzie są wykonywane dwa nielingwistyczne porównania ciągów, w których nie jest uwzględniana kultura. W pierwszym z nich jest uwzględniana wielkość liter, a w drugim nie.

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

Tabele wagi sortowania, zestaw plików tekstowych zawierających informacje na temat wag znaków używanych w operacjach sortowania i porównywania dla systemów operacyjnych Windows oraz domyślną tabelę elementów sortowania Unicode, tabelę wagi sortowania dla systemów Linux i macOS.

Zobacz też