Comparar y ordenar datos para una referencia cultural específica

El orden alfabético y las convenciones para establecer secuencias de elementos varían según las referencias culturales. Por ejemplo, en el criterio de ordenación se pueden distinguir o no mayúsculas y minúsculas. Puede tener base fonética o basarse en la apariencia del carácter. En los idiomas de Asia oriental, el criterio de ordenación tiene en cuenta los trazos y el radical de los ideogramas. Las ordenaciones también pueden variar en función del orden fundamental que utiliza el idioma y la referencia cultural para el alfabeto. Por ejemplo, el idioma sueco tiene un carácter Æ que se ordena después de la Z en el alfabeto. El idioma alemán también tiene este carácter, pero se ordena como ae, después de A en el alfabeto. Una aplicación de uso internacional debe ser capaz de comparar y ordenar datos basándose en la referencia cultural, con el objetivo de ser compatible con convenciones de ordenación específicas del idioma y de la referencia cultural.

Nota

Hay escenarios en los que no es deseable el comportamiento que tiene en cuenta la referencia cultural. Para obtener más información sobre cuándo y cómo realizar operaciones que no tienen en cuenta las referencias culturales, vea Operaciones de cadena que no tienen en cuenta las referencias culturales.

Comparar cadenas

La clase CompareInfo proporciona un conjunto de métodos que se pueden utilizar para realizar comparaciones de cadenas que tengan en cuenta la referencia cultural. La clase CultureInfo tiene la propiedad CultureInfo.CompareInfo que es una instancia de esta clase. Esta propiedad define cómo comparar y ordenar cadenas para una referencia cultural específica. El método String.Compare utiliza la información de la propiedad CultureInfo.CompareInfo para comparar cadenas. El método String.Compare devuelve un número entero negativo si cadena1 es menor que cadena2, cero si cadena1 y cadena2 son iguales, y un número entero positivo si cadena1 es mayor que cadena2.

En el ejemplo de código siguiente se ilustra cómo dos cadenas pueden dar distintos resultados según el método String.Compare en función de la referencia cultural utilizada para realizar la comparación. En primer lugar, CurrentCulture se establece como danés de Dinamarca y se comparan las cadenas "Apple" y "Æble". En el idioma danés el carácter Æ se trata como carácter individual y se ordena después de la Z en el alfabeto. Por lo tanto, la cadena "Æble" es mayor que "Apple" para la referencia cultural danesa. En primer lugar, CurrentCulture se establece como inglés de EE.UU. y se comparan las cadenas "Apple" y "Æble" de nuevo. Esta vez, se determina que la cadena "Æble" es menor que "Apple". En el idioma inglés se trata el carácter Æ como símbolo especial y se ordena antes de la letra A en el alfabeto.

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 se ejecuta este código, el resultado es el siguiente:

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

Para obtener más información acerca de la comparación de cadenas, vea String (Clase) y Comparar cadenas.

Utilizar criterios alternativos de ordenación

Algunas referencias culturales admiten más de un criterio de ordenación. Por ejemplo, la referencia cultural "zh-CN" (chino de China) admite una ordenación por pronunciación (predeterminada) y una ordenación por número de trazos. Al crear CultureInfo utilizando un nombre de referencia cultural, como "zh-CN", se utiliza el criterio de ordenación predeterminado. Para especificar el criterio de ordenación alternativo, se crea un objeto CultureInfo utilizando el LCID para el criterio de ordenación alternativo. A continuación, se obtiene un objeto CompareInfo (para utilizar en comparaciones de cadenas) de CultureInfo.CompareInfo. Como alternativa, es posible crear un objeto CompareInfo directamente utilizando el método CompareInfo.GetCompareInfo (Int32), especificando el LCID para el criterio de ordenación alternativo.

En la tabla siguiente se enumeran las referencias culturales que admiten criterios de ordenación alternativos y los LCID para los predeterminados y los alternativos.

Nombre de referencia cultural Idioma-país o región Nombre de ordenación predeterminada y LCID Nombre de ordenación alternativa y LCID

es-ES

Español - España

Internacional: 0x00000C0A

Tradicional: 0x0000040A

zh-TW

Chino - Taiwán

Número de trazos: 0x00000404

Bopomofo: 0x00030404

zh-CN

Chino - China

Pronunciación: 0x00000804

Número de trazos: 0x00020804

zh-HK

Chino - Zona administrativa especial de Hong Kong

Número de trazos: 0x00000c04

Número de trazos: 0x00020c04

zh-sg

Chino - Singapur

Pronunciación: 0x00001004

Número de trazos: 0x00021004

zh-MO

Chino - Zona administrativa especial de Macao

Pronunciación: 0x00001404

Número de trazos: 0x00021404

ja-JP

Japonés - Japón

Predeterminada: 0x00000411

Unicode: 0x00010411

ko-KR

Coreano - Corea

Predeterminada: 0x00000412

Xwansung coreano - Unicode: 0x00010412

de-DE

Alemán - Alemania

Diccionario: 0x00000407

Ordenación de libreta de teléfonos DIN: 0x00010407

hu-HU

Húngaro - Hungría

Predeterminada: 0x0000040e

Ordenación técnica: 0x0001040e

ka-GE

Georgiano - Georgia

Tradicional: 0x00000437

Alfabetización internacional: 0x00010437

Buscar cadenas

Puede utilizar el método CompareInfo.IndexOf sobrecargado para devolver el índice con base cero de un carácter o subcadena dentro de una cadena especificada. Este método devuelve un número entero negativo si el carácter o subcadena no se encuentra en la cadena especificada. Al buscar un carácter determinado mediante CompareInfo.IndexOf, tenga en cuenta que las sobrecargas del método que aceptan el parámetro CompareOptions realizan la comparación de forma diferente que las sobrecargas del método que no aceptan el parámetro CompareOptions. Las sobrecargas de CompareInfo.IndexOf que buscan un valor char(Char en Visual Basic) y no aceptan un parámetro de tipo CompareOptions realizan una búsqueda que tiene en cuenta la referencia cultural. Esto significa que si char es un valor Unicode que representa un carácter compuesto, como la ligadura 'Æ' (\u00C6), puede ser considerada equivalente a cualquier aparición de sus componentes en la secuencia correcta, como "AE" (\u0041\u0045), en función de la referencia cultural. Para realizar una búsqueda ordinal (que no tiene en cuenta la referencia cultural), donde un valor char se considera equivalente a otro valor char sólo si los valores Unicode son los mismos, se utiliza una de las sobrecargas de CompareInfo.IndexOf que aceptan el parámetro CompareOptions. El valor CompareOptions.Ordinal se establece como parámetro CompareOptions.

También puede utilizar sobrecargas del método String.IndexOf que buscan un valor char para realizar una búsqueda ordinal. Tenga presente que las sobrecargas del método String.IndexOf que buscan una cadena realizan una búsqueda que tiene en cuenta la referencia cultural.

En el ejemplo de código siguiente se ilustra la diferencia entre los resultados devueltos por el método CompareInfo.IndexOf(string, char) en función de la referencia cultural. Se crea CultureInfo para "da-DK" (danés de Dinamarca). A continuación, se utilizan sobrecargas del método CompareInfo.IndexOf para buscar el carácter 'Æ' en las cadenas "Æble" y "aeble". Se observa que, para la referencia cultural "da-DK", el método CompareInfo.IndexOf que acepta el parámetro CompareOptions.Ordinal y el método CompareInfo.Index que no lo acepta devuelven el mismo resultado. El carácter 'Æ' sólo se considera equivalente al valor del código 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);
   }
}

Este código genera el resultado siguiente:

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 reemplaza CultureInfo ci = new CultureInfo ("da-DK"); por CultureInfo ci = new CultureInfo ("en-US"), el método CompareInfo.Index con el parámetro CompareOptions.Ordinal devuelve un valor diferente al que devuelve el método sin el parámetro. La comparación que tiene en cuenta la referencia cultural realizada por CompareInfo.IndexOf(string, char) evalúa el carácter 'Æ' como equivalente a sus componentes "ae". La comparación ordinal (que no tiene en cuenta la referencia cultural) realizada por el método CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) no devuelve el carácter 'Æ' equivalente a "ae" porque los valores de código Unicode no coinciden.

Al volver a compilar y ejecutar el código para la referencia cultural "en-US", se genera el resultado siguiente:

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

Ordenar cadenas

La clase Array proporciona un método Array.Sort sobrecargado que permite ordenar matrices en función de la propiedad CultureInfo.CurrentCulture. En el ejemplo siguiente se crea una matriz de tres cadenas. En primer lugar, se establece CurrentCulture como "en-US" y se llama al método Array.Sort. El criterio de ordenación resultante se basa en las convenciones de ordenación para la referencia cultural "en-US". A continuación, se establece CurrentCulture como "da-DK" y se llama de nuevo al método Array.Sort. Observe que el criterio de ordenación que resulta difiere del resultado de "en-US" porque se utilizan las convenciones de ordenación para la referencia cultural "da-DK".

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 ) );
   }
}

Este código genera el resultado siguiente:

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

Utilizar claves de ordenación

Las claves de ordenación se utilizan para admitir ordenaciones que tienen en cuenta la referencia cultural. Basándose en el estándar Unicode, a cada carácter de una cadena se le otorgan varias categorías de prioridad de ordenación, entre las que se incluyen las prioridades alfabéticas, la distinción de mayúsculas y minúsculas, y los signos diacríticos. Una clave de ordenación sirve como repositorio de estas categorías para una determinada cadena. Por ejemplo, una clave de ordenación puede contener una cadena de prioridades alfabéticas, seguida de una cadena de prioridades de uso de mayúsculas y minúsculas, etcétera. Para obtener más información acerca de los conceptos claves de ordenación, vea el estándar Unicode en www.unicode.org.

En .NET Framework, la clase SortKey asigna cadenas a las correspondientes claves de ordenación y viceversa. Puede utilizar el método CompareInfo.GetSortKey con el fin de crear una clave de ordenación para la cadena que especifique. La clave de ordenación que resulta para la cadena especificada es una secuencia de bytes que puede variar en función de CurrentCulture y del parámetro CompareOptions que indique. Por ejemplo, si especifica IgnoreCase al crear una clave de ordenación, la operación de comparación de cadenas que utiliza la clave de ordenación no distinguirá mayúsculas y minúsculas.

Después de crear una clave de ordenación para una cadena, puede pasarla como parámetro a los métodos proporcionados por la clase SortKey. El métodoSortKey.Compare permite comparar claves de ordenación. Dado que SortKey.Compare realiza una simple comparación byte a byte, es mucho más rápido que String.Compare. En las aplicaciones que hacen un uso intensivo de la ordenación, puede mejorarse el rendimiento generando y almacenando las claves de ordenación para todas las cadenas utilizadas. Cuando se requiere una ordenación o una comparación, se pueden utilizar las claves de ordenación en lugar de las cadenas.

En el ejemplo de código siguiente se crean claves de ordenación para dos cadenas cuando se establece CurrentCulture como "da-DK". Se comparan las dos cadenas mediante el método SortKey.Compare y se muestra el resultado. El método SortKey.Compare devuelve un número entero negativo si cadena1 es menor que cadena2, cero (0) si cadena1 y cadena2 son iguales, y un número entero positivo si cadena1 es mayor que cadena2. A continuación, se establece CurrentCulture como referencia cultural "en-US" y se crean claves de ordenación para las mismas cadenas. Se comparan las claves de ordenación para las cadenas y se muestra el resultado. Observe que el resultado de la ordenación cambia en función de CurrentCulture. Aunque el resultado del siguiente código de ejemplo es idéntico al resultado de la comparación de esas cadenas en el ejemplo de Comparar cadenas visto anteriormente en este tema, el método SortKey.Compare es más rápido que el método 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);
   }
}

Este código genera el resultado siguiente:

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

Normalización

Puede normalizar las cadenas a mayúsculas o minúsculas antes de la ordenación. Las reglas para la ordenación de cadenas y la distinción de mayúsculas y minúsculas son específicas del idioma. Por ejemplo, incluso en los idiomas basados en el alfabeto latino hay diferentes reglas de composición y ordenación. Sólo hay unos pocos idiomas (incluido el inglés) donde el criterio de ordenación coincide con el orden de los puntos de código (por ejemplo, A [65] va antes de B [66]).

No debe basarse en puntos de código para realizar comparaciones de cadenas y ordenaciones precisas. Además, .NET Framework no exige ni garantiza una forma específica de normalización. El usuario es el responsable de realizar la normalización adecuada de las aplicaciones que desarrolle.

Vea también

Referencia

CompareInfo Class
SortKey Class

Conceptos

Operaciones de cadenas que no distinguen entre referencias culturales

Otros recursos

Codificación y localización