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.

Remarque   Dans certains scénarios, 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 a une propriété 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é CompareInfo pour comparer des chaînes. La méthode String.Compare retourne un entier négatif si string1 est inférieur à string2, zéro si string1 et string2 sont égaux et un entier positif si string1 est supérieur à string2.

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, CurrentCulture a la valeur da-DK pour la culture Danois (Danemark), et les chaînes "Apple" et "Æble" sont comparées. 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, le CurrentCulture a la valeur en-US pour la culture Anglais (États-Unis), et les chaînes "Apple" et "Æble" sont comparées. 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.Globalization
Imports System.Threading

Public Class TestClass
   Public Shared Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"

      ' Set the current culture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Dim result1 As Integer = [String].Compare(str1, str2)
      Console.WriteLine("When the CurrentCulture is ""da-DK"",")
      Console.WriteLine("the result of comparing_{0} with {1} is: {2}", 
                        str1, str2, result1)

      ' Set the current culture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Dim result2 As Integer = [String].Compare(str1, str2)
      Console.WriteLine("When the CurrentCulture is""en-US"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2,result2)
   End Sub
End Class
' The example displays the following output:
'    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
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);
   }
}
// The example displays the following output:
//    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 Comparaison de chaînes.

Utilisation d'ordres de tri secondaires

Certaines cultures prennent en charge plusieurs ordres de tri. Par exemple, la culture Chinois (RPC), avec le nom zh-CN, prend en charge un tri selon la prononciation (par défaut) et un tri en fonction du nombre de traits. Lorsque votre application crée un objet 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, l'application doit créer un objet CultureInfo en utilisant l'identificateur correspondant à l'autre ordre de tri. L'application doit ensuite obtenir un objet CompareInfo de CompareInfo à utiliser dans les comparaisons de chaînes. Votre application peut aussi créer directement un objet CompareInfo à l'aide de la méthodeCompareInfo.GetCompareInfo, en spécifiant l'identificateur correspondant à l'autre ordre de tri.

Le tableau suivant répertorie les cultures qui prennent en charge d'autres ordres de tri et précise les identificateurs pour l'ordre de tri par défaut et l'autre ordre de tri.

Nom de la culture

Culture

Nom et identificateur de l'ordre de tri par défaut

Nom et identificateur de l'autre ordre de tri

es-ES

Espagnol (Espagne)

International : 0x00000C0A

Traditionnel : 0x0000040A

zh-TW

Chinois (Taïwan)

Nombre de traits : 0x00000404

Bopomofo : 0x00030404

zh-CN

Chinois (RPC)

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 (Région administrative spéciale de Macao)

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

Votre application peut utiliser la méthode surchargée CompareInfo.IndexOf pour extraire 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 extrait 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, l'application doit tenir compte du fait 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 méthode qui recherchent un type de caractère et n'acceptent pas de paramètre CompareOptions exécutent une recherche dépendante de la culture. Lorsqu’une valeur Unicode représente 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 exécuter une recherche ordinale (indépendante de la culture) d'un caractère dont le type est considéré équivalent à un autre type de caractère uniquement si les valeurs Unicode sont les mêmes, l'application doit utiliser l'une des surcharges CompareInfo.IndexOf qui prennent un paramètre CompareOptions et lui ont donné la valeur Ordinal.

Vos applications peuvent également utiliser des surcharges de la méthode String.IndexOf qui recherchent un caractère pour exécuter une recherche ordinale (indépendante de la culture). Notez que les surcharges de cette méthode 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 IndexOf selon la culture. Un objet CultureInfo est créé pour da-DK, correspondant à la culture Danois (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 da-DK, la méthode CompareInfo.IndexOf qui prend un paramètre CompareOptions avec la valeur Ordinal et la même méthode qui ne prend pas ce paramètre retournent le même résultat. Le caractère « Æ » est uniquement considéré comme équivalant à la valeur de code Unicode \u00E6.

Imports System.Globalization
Imports System.Threading

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("CultureInfo is set to {0}", 
                        ci.DisplayName)
      Console.WriteLine()
      Console.WriteLine("Using CompareInfo.IndexOf(string, char) method")
      Console.WriteLine("the result of searching for {0} in the string {1} is: {2}", 
                        find, str1, result1)
      Console.WriteLine()
      Console.WriteLine("Using CompareInfo.IndexOf(string, char) method")
      Console.WriteLine("the result of searching for {0} in the string {1} is: {2}", 
                        find, str2, result2)
      Console.WriteLine()
      Console.WriteLine("Using CompareInfo.IndexOf(string, char, CompareOptions) method")
      Console.WriteLine("the result of searching for {0} in the string {1} is: {2}", 
                        find, str1, result3)
      Console.WriteLine()
      Console.WriteLine("Using CompareInfo.IndexOf(string, char, CompareOptions) method")
      Console.WriteLine("the result of searching for {0} in the string {1} is: {2}", 
                        find, str2, result4)
   End Sub
End Class
' The example displays the following output:
'    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
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);
   }
}
// The example displays the following output:
//    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 votre application remplace CultureInfo ci = new CultureInfo ("da-DK") par CultureInfo ci = new CultureInfo ("en-US"), la méthode CompareInfo.IndexOf avec le paramètre CompareOptions défini à Ordinal et la même méthode sans ce paramètre retournent des résultats différents. La comparaison dépendante de la culture effectuée par la méthode CompareInfo.IndexOf évalue le caractère « Æ »  comme équivalent à ses composants « ae ». La comparaison ordinale (indépendante de la culture) effectuée par la méthode CompareInfo.IndexOf ne retourne pas le caractère « Æ » comme équivalent à « ae » parce que leurs valeurs de code Unicode ne sont pas identiques.

Lorsque vous recompilez et exécutez ce code pour en-US, représentant la culture Anglais (États-Unis), 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 permet à votre application de trier des tableaux selon la propriété CurrentCulture. L'exemple suivant crée un tableau de trois chaînes. D'abord, la propriété Thread.CurrentThread.CurrentCulture a la valeur en-US, et la méthode Array.Sort est appelée. L'ordre de tri obtenu est basé sur les conventions de tri définies pour la culture Anglais (États-Unis). Ensuite, la propriété Thread.CurrentThread.CurrentCulture a la valeur da-DK, et la méthode Array.Sort est à nouveau appelée. Notez la façon dont l'utilisation des conventions de tri définies pour la culture da-DK aboutit à un ordre de tri différent de celui obtenu pour la culture en-US.

Imports System.Globalization
Imports System.IO
Imports System.Threading

Public Class TextToFile   
   Public Shared Sub Main()
      ' Creates and initializes a new array to store 
      ' these date/time objects.
      Dim stringArray() As String = { "Apple", "Æble", "Zebra"}

      ' Displays the values of the array.
      Console.WriteLine("The original string array:")
      PrintIndexAndValues(stringArray)

      ' Set the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sort the values of the Array.
      Array.Sort(stringArray)

      ' Display the values of the array.
      Console.WriteLine("After sorting for the ""en-US"" culture:")
      PrintIndexAndValues(stringArray)

      ' Set 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("After sorting for the culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray() As String)
      For i As Integer = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine("[{0}]: {1}", i, myArray(i))
      Next
      Console.WriteLine()
   End Sub 
End Class
' The example displays the following output:
'       The original string array:
'       [0]: Apple
'       [1]: Æble
'       [2]: Zebra
'       
'       After sorting for the "en-US" culture:
'       [0]: Æble
'       [1]: Apple
'       [2]: Zebra
'       
'       After sorting for the culture "da-DK":
'       [0]: Apple
'       [1]: Zebra
'       [2]: Æble
using System;
using System.Globalization;
using System.Threading;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      // Create and initialize a new array to store the strings.
      string[] stringArray = { "Apple", "Æble", "Zebra"};

      // Display the values of the array.
      Console.WriteLine( "The original string array:");
      PrintIndexAndValues(stringArray);

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

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"en-US\":");
      PrintIndexAndValues(stringArray); 

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

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"da-DK\":");
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(string[] myArray)  
   {
      for (int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
         Console.WriteLine("[{0}]: {1}", i, myArray[i]);
      Console.WriteLine();      
   }
}
// The example displays the following output:
//       The original string array:
//       [0]: Apple
//       [1]: Æble
//       [2]: Zebra
//       
//       After sorting for the "en-US" culture:
//       [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 disponible sur la page d'accueil Unicode (éventuellement en anglais).

Dans .NET Framework, la classe SortKey mappe les chaînes sur leurs clés de tri et inversement. Vos applications peuvent 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 la valeur CompareOptions que vous spécifiez. Par exemple, si l'application spécifie la valeur IgnoreCase en créant une clé de tri, une opération de comparaison de chaînes utilisant la clé de tri ignore la casse.

Après avoir créé une clé de tri pour une chaîne, l'application peut la passer comme paramètre aux méthodes fournies par la classe SortKey. La méthode SortKey.Compare autorise la comparaison de clés de tri. Parce que cette méthode effectue une simple comparaison octet par octet, elle est bien plus rapide que String.Compare. Les applications à forte intensité de tri pourront améliorer les performances en générant et stockant des clés de tri pour toutes les chaînes utilisées. Lorsqu'une opération de tri ou de comparaison est requise, l'application peut 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 définie est da-DK. Il compare les deux chaînes à l'aide de la méthode SortKey.Compare et affiche les résultats. La méthode 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, la propriété Thread.CurrentThread.CurrentCulture a la valeur en-US et des clés de tri sont créées 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 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.Globalization
Imports System.Threading

Public Class SortKeySample
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"

      ' Set the CurrentCulture to "da-DK".
      Dim dk As New CultureInfo("da-DK")
      Thread.CurrentThread.CurrentCulture = dk

      ' Create 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)

      ' Compare the two sort keys and display the results.
      Dim result1 As Integer = SortKey.Compare(sc1, sc2)
      Console.WriteLine("When the  current culture is ""da-DK"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result1)
      Console.WriteLine()

      ' Set the CurrentCulture to "en-US".
      Dim enus As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = enus

      ' Create 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)

      ' Compare the two sort keys and display the results.
      Dim result2 As Integer = SortKey.Compare(sc3, sc4)
      Console.WriteLine("When the CurrentCulture is ""en-US"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result2)
   End Sub
End Class
' The example displays the following output:
'       When the  current culture 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
using System;
using System.Threading;
using System.Globalization;

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

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

      // Create 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);

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

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

      // Create 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);

      // Compare the two sort keys and display the results.
      int result2 = SortKey.Compare(sc3, sc4);
      Console.WriteLine("When the CurrentCulture is \"en-US\",");
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result2);
   }
}
// The example displays the following output:
//       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

Votre application 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]).

Vos applications ne doivent 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.

Pour plus d'informations sur la normalisation de chaînes, consultez Normalisation et tri.

Voir aussi

Concepts

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

Normalisation et tri

Autres ressources

Encodage et localisation