Dela via


Utföra strängjämförelser opåverkade av kulturer

Metoden String.Compare gör som standardutförande kulturkänsliga och skiftlägeskänsliga jämförelser. Den här metoden innehåller också flera överlagringar som ger en culture parameter som gör att du kan ange vilken kultur som ska användas och en comparisonType parameter som gör att du kan ange de jämförelseregler som ska användas. Om du anropar dessa metoder i stället för standardöverbelastningen tas alla tvetydigheter bort om reglerna som används i ett visst metodanrop, och gör det tydligt om en viss jämförelse är kulturkänslig eller kulturokänslig.

Anmärkning

Båda överlagringarna av metoden String.CompareTo utför jämförelser som är både kulturkänsliga och skiftlägeskänsliga. Du kan inte använda den här metoden för att utföra kulturokänsliga jämförelser. För tydlighetens skull i koden rekommenderar vi att du använder String.Compare-metoden i stället.

För kulturkänsliga åtgärder anger du uppräkningsvärdet StringComparison.CurrentCulture eller StringComparison.CurrentCultureIgnoreCase som comparisonType parameter. Om du vill utföra en kulturkänslig jämförelse med en annan kultur än den aktuella kulturen anger du det objekt som representerar den CultureInfo kulturen som culture parameter.

De kulturokänsliga strängjämförelser som stöds av String.Compare metoden är antingen språkliga (baserade på sorteringskonventionerna i den invarianta kulturen) eller icke-språkliga (baserat på ordningstalet för tecknen i strängen). De flesta kulturokänsliga strängjämförelser är icke-språkliga. För dessa jämförelser anger du uppräkningsvärdet StringComparison.Ordinal eller StringComparison.OrdinalIgnoreCase som comparisonType parameter. Om ett säkerhetsbeslut (till exempel användarnamn eller lösenordsjämförelse) baseras på resultatet av en strängjämförelse bör åtgärden till exempel vara kulturokänslig och icke-språklig för att säkerställa att resultatet inte påverkas av konventionerna i en viss kultur eller ett visst språk.

Använd en kulturokänslig språksträngsjämförelse om du vill hantera språkligt relevanta strängar från flera kulturer på ett konsekvent sätt. Om ditt program till exempel visar ord som använder flera teckenuppsättningar i en listruta kanske du vill visa ord i samma ordning oavsett aktuell kultur. För kulturokänsliga språkjämförelser definierar .NET en invariant kultur som baseras på språkkonventionerna på engelska. Utför en kulturokänslig språkjämförelse genom att ange StringComparison.InvariantCulture eller StringComparison.InvariantCultureIgnoreCase som comparisonType-parametern.

I följande exempel utförs två kulturokänsliga, icke-språkliga strängjämförelser. Den första är skiftlägeskänslig, men den andra är inte det.

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($"{StringComparison.Ordinal} comparison of '{string1}' and '{string2}': {compareResult}");

        compareResult = String.Compare(string1, string2,
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine($"{StringComparison.OrdinalIgnoreCase} comparison of '{string1}' and '{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

Du kan ladda ned sorteringsvikttabeller, en uppsättning textfiler som innehåller information om teckenvikterna som används i sorterings- och jämförelseåtgärder för Windows-operativsystem och standardtabellen för Unicode-sorteringselement, sorteringsvikttabellen för Linux och macOS.

Se även