Effectuer des comparaisons de chaînes indépendantes de la culture

Par défaut, la méthode String.Compare effectue des comparaisons dépendantes de la culture et qui respectent la casse. Cette méthode inclut également plusieurs surcharges qui fournissent un paramètre culture qui vous permet de spécifier la culture à utiliser et un paramètre comparisonType qui vous sert à spécifier les règles de comparaison à utiliser. L'appel de ces méthodes au lieu de la surcharge par défaut supprime toute ambiguïté à propos des règles utilisées dans un appel de méthode particulier et indique si une comparaison donnée est dépendante ou indépendante de la culture.

Notes

Les surcharges de la méthode String.CompareTo effectuent des comparaisons dépendantes de la culture et sensibles à la casse ; vous ne pouvez pas utiliser cette méthode pour effectuer des comparaisons indépendantes de la culture. Pour des raisons de clarté du code, nous recommandons d'utiliser la méthode String.Compare à la place.

Pour les opérations dépendantes de la culture, spécifiez la valeur d'énumération StringComparison.CurrentCulture ou StringComparison.CurrentCultureIgnoreCase comme paramètre comparisonType. Si vous souhaitez effectuer une comparaison dépendante de la culture à l'aide d'une culture désignée autre que la culture actuelle, spécifiez l'objet CultureInfo qui représente cette culture comme paramètre culture.

Les comparaisons de chaînes indépendantes de la culture prises en charge par la méthode String.Compare sont linguistiques (selon les conventions de tri de la culture indifférente) ou non linguistiques (selon la valeur ordinale des caractères dans la chaîne). La plupart des comparaisons de chaînes indépendantes de la culture sont non linguistiques. Pour ces comparaisons, spécifiez la valeur d'énumération StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase comme paramètre comparisonType. Par exemple, si une décision de sécurité (telle qu'une comparaison de nom d'utilisateur ou de mot de passe) est basée sur le résultat d'une comparaison de chaînes, l'opération doit être indépendante de la culture et non linguistique pour garantir que le résultat n'est pas affecté par les conventions d'une culture ou d'une langue particulière.

Utilisez la comparaison de chaînes linguistique indépendante de la culture si vous souhaitez gérer de manière cohérente des chaînes linguistiquement pertinentes de cultures multiples. Par exemple, si votre application affiche des mots qui utilisent plusieurs jeux de caractères dans une zone de liste, vous pouvez afficher des mots dans le même ordre indépendamment de la culture actuelle. Pour les comparaisons linguistiques indépendantes de la culture, .NET définit une culture indifférente basée sur les conventions linguistiques de l’anglais. Pour effectuer une comparaison linguistique indépendante de la culture, spécifiez StringComparison.InvariantCulture ou StringComparison.InvariantCultureIgnoreCase comme paramètre comparisonType.

L'exemple suivant exécute deux comparaisons de chaînes indépendantes de la culture, non linguistiques. La première respecte la casse, mais pas la seconde.

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

Vous pouvez télécharger les Sorting Weight Tables, un ensemble de fichiers texte qui contiennent des informations sur les poids des caractères utilisés dans les opérations de tri et de comparaison pour les systèmes d’exploitation Windows et la Default Unicode Collation Element Table, la table de pondération de tri pour Linux et macOS.

Voir aussi