Partager via


Comparaison et tri des données pour une culture spécifique

L'ordre alphabétique et les conventions de classement d'éléments varient d'une culture à l'autre. Par exemple, l'ordre de tri peut respecter la casse ou ne pas la respecter. Il peut être basé sur la phonétique ou sur l'apparence du caractère. Dans les langues d'Asie orientale, les éléments sont classés en fonction du trait et de la clé des idéogrammes. Les tris peuvent aussi varier en fonction de l'ordre fondamental utilisé par la langue ou la culture pour l'alphabet. Par exemple, la langue suédoise emploie un caractère Æ qu'elle place après Z dans l'alphabet. La langue allemande connaît, elle aussi, ce caractère, mais le trie comme ae, après A dans l'alphabet. Une application mondialisable doit être capable de comparer et trier des données selon la culture afin de prendre en charge des conventions de tri spécifiques à une culture et à une langue.

Notes

Il existe des scénarios dans lesquels un comportement dépendant de la culture n'est pas souhaitable. Pour plus d'informations sur quand et comment effectuer des opérations indépendantes de la culture, consultez Opérations de chaînes indépendantes de la culture.

Comparaison de chaînes

La classe CompareInfo fournit un ensemble de méthodes que vous pouvez utiliser pour effectuer des comparaisons de chaînes dépendantes de la culture. La classe CultureInfo possède une propriété CultureInfo.CompareInfo qui est une instance de cette classe. Cette propriété définit comment comparer et trier les chaînes pour une culture spécifique. La méthode String.Compare utilise les informations de la propriété CultureInfo.CompareInfo pour comparer les chaînes. La méthode String.Compare retourne un entier négatif si chaîne1 est inférieure à chaîne2, zéro si chaîne1 et chaîne2 sont égales et un entier positif si chaîne1 est supérieure à chaîne2.

L'exemple de code suivant montre comment la méthode String.Compare peut évaluer deux chaînes différemment selon la culture utilisée pour effectuer la comparaison. D'abord, l'exemple définit le danois au Danemark comme CurrentCulture et compare les chaînes "Apple" et "Æble". La langue danoise traite le caractère Æ comme une lettre individuelle et la trie après Z dans l'alphabet. Par conséquent, la chaîne "Æble" est supérieure à "Apple" pour la culture danoise. Ensuite, l'exemple définit l'anglais aux États-Unis comme CurrentCulture et compare de nouveau les chaînes "Apple" et "Æble". Cette fois, la chaîne "Æble" est évaluée comme inférieure à "Apple". En effet, la langue anglaise traite le caractère Æ comme un symbole spécial, qu'elle trie avant la lettre A dans l'alphabet.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   Public Shared Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"
      
      ' Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Dim result1 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing_{0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Dim result2 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the _
         CurrentCulture is""en-US""," + ControlChars.Newline + " _
         the result of comparing {0} with {1} is: {2}", str1, _
         str2,result2)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareStringSample
{
   public static void Main()
   {
      string str1 = "Apple";
      string str2 = "Æble"; 

      // Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Compares the two strings.
      int result1 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result1);

      // Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Compares the two strings.
      int result2 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result2);
   }
}

Si vous exécutez ce code, la sortie présente l'aspect suivant :

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Pour plus d'informations sur les comparaisons de chaînes, consultez String, classe et Comparaison de chaînes.

Utilisation d'ordres de tri secondaires

Certaines cultures prennent en charge plusieurs ordres de tri. Par exemple, la culture "zh-CN" (chinois en Chine) prend en charge un tri selon la prononciation (par défaut) et un tri en fonction du nombre de traits. Lorsque vous créez CultureInfo en utilisant un nom de culture, par exemple "zh-CN", l'ordre de tri par défaut est utilisé. Pour spécifier l'ordre de tri secondaire, créez un objet CultureInfo en utilisant l'identificateur LCID pour l'ordre de tri secondaire. Puis, obtenez un objet CompareInfo (à utiliser dans les comparaisons de chaînes) de CultureInfo.CompareInfo. Alternativement, vous pouvez créer directement un objet CompareInfo en utilisant la méthode CompareInfo.GetCompareInfo (Int32), en spécifiant le LCID pour l'ordre de tri alternatif.

Le tableau suivant énumère les cultures qui prennent en charge des ordres de tri secondaires et précise les identificateurs LCID pour les ordres de tri par défaut et secondaire.

Nom de la culture Langue-pays/région Nom et LCID de l'ordre de tri par défaut Nom et LCID de l'ordre de tri secondaire

es-ES

Espagnol - Espagne

International : 0x00000C0A

Traditionnel : 0x0000040A

zh-TW

Chinois - Taïwan

Nombre de traits : 0x00000404

Bopomofo : 0x00030404

zh-CN

Chinois - Chine

Prononciation : 0x00000804

Nombre de traits : 0x00020804

zh-HK

Chinois - Hong Kong (Région administrative spéciale de)

Nombre de traits : 0x00000c04

Nombre de traits : 0x00020c04

zh-SG

Chinois - Singapour

Prononciation : 0x00001004

Nombre de traits : 0x00021004

zh-MO

Chinois - Macao (Région administrative spéciale de)

Prononciation : 0x00001404

Nombre de traits : 0x00021404

ja-JP

Japonais - Japon

Par défaut : 0x00000411

Unicode : 0x00010411

ko-KR

Coréen - Corée

Par défaut : 0x00000412

Coréen Xwansung - Unicode : 0x00010412

de-DE

Allemand - Allemagne

Dictionnaire : 0x00000407

Annuaire téléphonique (DIN) : 0x00010407

hu-HU

Hongrois - Hongrie

Par défaut : 0x0000040e

Tri technique : 0x0001040e

ka-GE

Géorgien - Géorgie

Traditionnel : 0x00000437

Tri moderne : 0x00010437

Recherche de caractères dans les chaînes

Vous pouvez utiliser la méthode surchargée CompareInfo.IndexOf pour retourner l'index de base zéro d'un caractère ou d'une sous-chaîne à l'intérieur d'une chaîne spécifiée. Cette méthode retourne un entier négatif si le caractère ou la sous-chaîne est introuvable dans la chaîne spécifiée. En recherchant un caractère spécifié à l'aide de CompareInfo.IndexOf, ne perdez pas de vue que les surcharges de méthode qui acceptent un paramètre CompareOptions n'effectuent pas la comparaison de la même manière que celles qui n'en acceptent pas. Les surcharges de CompareInfo.IndexOf qui recherchent une valeur char (Char en Visual Basic) et ne prennent pas de paramètre de type CompareOptions effectuent une recherche dépendante de la culture. Cela signifie que si la valeur char est une valeur Unicode représentant un caractère précomposé, tel que la ligature "Æ" (\u00C6), elle peut être considérée comme équivalant à toute occurrence de ses composants dans le bon ordre, par exemple "AE" (\u0041\u0045), selon la culture. Pour effectuer une recherche ordinale (indépendante de la culture), dans laquelle un objet de type char n'est considéré comme équivalant à un autre objet char que si leurs valeurs Unicode sont identiques, utilisez l'une des surcharges de la méthode CompareInfo.IndexOf qui admet un paramètre CompareOptions. Affectez au paramètre CompareOptions la valeur CompareOptions.Ordinal.

Pour effectuer une recherche ordinale, vous pouvez aussi utiliser des surcharges de la méthode String.IndexOf qui recherchent une valeur char. Notez que les surcharges de la méthode String.IndexOf qui recherchent une chaîne effectuent une recherche dépendante de la culture.

L'exemple de code suivant illustre la différence entre les résultats retournés par la méthode CompareInfo.IndexOf(string, char) selon la culture. Cet exemple crée CultureInfo pour "da-DK" (danois au Danemark). Ensuite, il utilise des surcharges de la méthode CompareInfo.IndexOf pour rechercher le caractère "Æ" dans les chaînes "Æble" et "aeble". Notez que pour la culture "da-DK", la méthode CompareInfo.IndexOf, qui admet un paramètre CompareOptions.Ordinal, et la méthode CompareInfo.Index, qui n'en admet pas, retournent le même résultat. Le caractère "Æ" est uniquement considéré comme équivalant à la valeur de code Unicode \u00E6.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class CompareClass
   Public Shared Sub Main()
      Dim str1 As String = "Æble"
      Dim str2 As String = "aeble"
      Dim find As Char = "Æ"
      
      ' Creates a CultureInfo for Danish in Denmark.
      Dim ci As New CultureInfo("da-DK")
      
      Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
      Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
      Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _ 
         CompareOptions.Ordinal)
      Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
         CompareOptions.Ordinal)      
      
      Console.WriteLine(ControlChars.Newline + "CultureInfo is set to _
         {0}", ci.DisplayName)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result1)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result2)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result3)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result4)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareClass
{

   public static void Main()
   {
      string str1 = "Æble";
      string str2 = "aeble"; 
      char find = 'Æ';

      // Creates a CultureInfo for Danish in Denmark.
      CultureInfo ci= new CultureInfo("da-DK");

      int result1 = ci.CompareInfo.IndexOf(str1, find);
      int result2 = ci.CompareInfo.IndexOf(str2, find);
      int result3 = ci.CompareInfo.IndexOf(str1, find,   
         CompareOptions.Ordinal);
      int result4 = ci.CompareInfo.IndexOf(str2, find, 
         CompareOptions.Ordinal);

      Console.WriteLine("\nCultureInfo is set to {0} ", ci.DisplayName);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str1, result1);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str2, result2);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str1, result3);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str2, result4);
   }
}

Ce code génère la sortie suivante :

CultureInfo is set to Danish (Denmark) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: -1

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Si vous remplacez CultureInfo ci = new CultureInfo ("da-DK"); par CultureInfo ci = new CultureInfo ("en-US"), la méthode CompareInfo.Index employée avec le paramètre CompareOptions.Ordinal et la méthode CompareInfo.Index employée sans le paramètre CompareOptions.Ordinal retournent des résultats différents. La comparaison dépendante de la culture effectuée par CompareInfo.IndexOf(string, char) évalue le caractère "Æ" comme équivalant à ses composants "ae". La comparaison ordinale (indépendante de la culture) effectuée par la méthode CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) ne retourne pas le caractère "Æ" comme équivalant à "ae" parce que leurs valeurs de code Unicode ne sont pas identiques.

Lorsque vous recompilez et exécutez ce code pour la culture "en-US", vous obtenez la sortie suivante :

The CurrentCulture property is set to English (United States) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Tri de chaînes

La classe Array fournit une méthode surchargée Array.Sort qui vous permet de trier des tableaux en fonction de la propriété CultureInfo.CurrentCulture. L'exemple suivant crée un tableau de trois chaînes. D'abord, cet exemple définit "en-US" comme CurrentCulture et appelle la méthode Array.Sort. L'ordre de tri résultant est basé sur les conventions de tri pour la culture "en-US". Ensuite, CurrentCulture est définie comme "da-DK" et la méthode Array.Sort est appelée à nouveau. Remarquez comment l'utilisation des conventions de tri pour la culture "da-DK" aboutit à un ordre de tri différent du précédent.

Imports System
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class TextToFile   
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      Dim str3 As [String] = "Zebra"
      
      ' Creates and initializes a new Array to store 
      ' these date/time objects.
      Dim stringArray As Array = Array.CreateInstance(GetType([String]), _
         3)
      stringArray.SetValue(str1, 0)
      stringArray.SetValue(str2, 1)
      stringArray.SetValue(str3, 2)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "The Array initially _
         contains the following strings:")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sorts the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""en-US"":")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      ' Sort the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray As Array)
      Dim i As Integer
      For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine(ControlChars.Tab + "[{0}]:" + _
            ControlChars.Tab + "{1}", i, myArray.GetValue(i))
      Next i
   End Sub 
End Class
using System;
using System.Threading;
using System.Globalization;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";
      String str3 = "Zebra";

      // Creates and initializes a new Array to store the strings.
      Array stringArray = Array.CreateInstance( typeof(String), 3 );
      stringArray.SetValue(str1, 0 );
      stringArray.SetValue(str2, 1 );
      stringArray.SetValue(str3, 2 );

      // Displays the values of the Array.
      Console.WriteLine( "\nThe Array initially contains the following 
            strings:" );
      PrintIndexAndValues(stringArray);

      // Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"en-US\":" );
      PrintIndexAndValues(stringArray); 

      // Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"da-DK\":" );
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(Array myArray)  
   {
      for ( int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
      Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}

Ce code génère la sortie suivante :

The Array initially contains the following strings:
   [0]:   Apple
   [1]:   Æble
   [2]:   Zebra

After sorting for the culture "en-US":
   [0]:   Æble
   [1]:   Apple
   [2]:   Zebra

After sorting for the culture "da-DK":
   [0]:   Apple
   [1]:   Zebra
   [2]:   Æble

Utilisation de clés de tri

Les clés de tri s'utilisent pour prendre en charge des tris tenant compte des cultures. Selon la norme Unicode, chaque caractère d'une chaîne se voit attribuer différentes pondérations de tri, notamment les pondérations alphabétique, diacritique et de casse. Une clé de tri sert de référentiel de ces pondérations pour une chaîne particulière. Par exemple, une clé de tri peut contenir une chaîne de pondération alphabétique, suivie d'une chaîne de pondération de casse, etc. Pour plus d'informations sur les concepts de clés de tri, consultez la norme Unicode à l'adresse http://www.unicode.org.

Dans le .NET Framework, la classe SortKey mappe les chaînes sur leurs clés de tri et vice versa. Vous pouvez utiliser la méthode CompareInfo.GetSortKey pour créer une clé de tri pour une chaîne que vous spécifiez. La clé de tri résultante pour une chaîne spécifiée est une suite d'octets qui peuvent varier selon la culture CurrentCulture et le paramètre CompareOptions que vous spécifiez. Par exemple, si vous spécifiez IgnoreCase lorsque vous créez une clé de tri, une opération de comparaison de chaînes utilisant la clé de tri ne tiendra pas compte de la casse.

Après avoir créé une clé de tri pour une chaîne, vous pouvez la passer comme paramètre aux méthodes fournies par la classe SortKey. La méthode SortKey.Compare vous permet de comparer des clés de tri. Dans la mesure où SortKey.Compare exécute une simple comparaison octet par octet, cette opération est beaucoup plus rapide qu'à l'aide de String.Compare. Dans les applications à forte intensité de tri, vous pouvez améliorer les performances en générant et stockant des clés de tri pour toutes les chaînes que l'application utilise. Lorsqu'une opération de tri ou de comparaison est requise, vous pouvez utiliser les clés de tri au lieu des chaînes.

L'exemple de code suivant crée des clés de tri pour deux chaînes lorsque la culture CurrentCulture est définie comme "da-DK". Il compare les deux chaînes à l'aide de la méthode SortKey.Compare et affiche les résultats. La méthode SortKey.Compare retourne un entier négatif si chaîne1 est inférieure à chaîne2, zéro (0) si chaîne1 et chaîne2 sont égales, et un entier positif si chaîne1 est supérieure à chaîne2. Ensuite, l'exemple définit "en-US" comme CurrentCulture et crée des clés de tri pour les deux chaînes. Les clés de tri pour les chaînes sont comparées et les résultats sont affichés. Remarquez que les résultats du tri diffèrent selon la culture CurrentCulture. Bien que les résultats de l'exemple de code suivant soient identiques à ceux de la comparaison de ces chaînes dans l'exemple Comparaison de chaînes, plus haut dans cette rubrique, la méthode SortKey.Compare est plus rapide que la méthode String.Compare.

Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class SortKeySample
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      
      ' Sets the CurrentCulture to "da-DK".
      Dim dk As New CultureInfo("da-DK")
      Thread.CurrentThread.CurrentCulture = dk
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc1 As SortKey = dk.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str2.
      Dim sc2 As SortKey = dk.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result1 As Integer = SortKey.Compare(sc1, sc2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to "en-US".
      Dim enus As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = enus
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc3 As SortKey = enus.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str1.
      Dim sc4 As SortKey = enus.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result2 As Integer = SortKey.Compare(sc3, sc4)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""en-US""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result2)
   End Sub
End Class
using System;
using System.Threading;
using System.Globalization;

public class SortKeySample 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";

      // Sets the CurrentCulture to "da-DK".
      CultureInfo dk = new CultureInfo("da-DK");
      Thread.CurrentThread.CurrentCulture = dk;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc1 = dk.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str2.
      SortKey sc2 = dk.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result1 = SortKey.Compare(sc1, sc2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result1);

      // Sets the CurrentCulture to "en-US".
      CultureInfo enus = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = enus ;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc3 = enus.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str1.
      SortKey sc4 = enus.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result2 = SortKey.Compare(sc3, sc4);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result2);
   }
}

Ce code génère la sortie suivante :

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Normalisation

Vous pouvez normaliser des chaînes en majuscules ou en minuscules avant le tri. Les règles de tri des chaînes et de choix de la casse sont spécifiques à la langue. Par exemple, même dans les langues latines, il y a des règles de composition et de tri différentes. Il n'y a que quelques langues (dont l'anglais) qui utilisent un ordre de tri correspondant à l'ordre des points de code (par exemple, A [65] précède B [66]).

Vous ne devez pas compter sur les points de code pour effectuer un tri et des comparaisons de chaînes précis. De plus, le .NET Framework n'applique ni ne garantit aucune forme spécifique de normalisation. C'est à vous qu'il incombe d'effectuer la normalisation appropriée dans les applications que vous développez.

Voir aussi

Référence

CompareInfo Class
SortKey Class

Concepts

Opérations de chaînes indépendantes de la culture

Autres ressources

Codage et localisation