Share via


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 del 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 una propiedad 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 CompareInfo para comparar las cadenas. El método String.Compare devuelve un entero negativo si string1 es menor que string2, devuelve cero si string1 y string2 son iguales y devuelve un entero positivo si string1 es mayor que string2.

En el ejemplo de código siguiente se ilustra cómo el método String.Compare puede evaluar dos cadenas de forma diferente en función de la referencia cultural utilizada para realizar la comparación. En primer lugar, CurrentCulture se establece como da-DK para la referencia cultural de danés (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. A continuación, CurrentCulture se establece en en-US para la referencia cultural de inglés (Estados Unidos) 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, el carácter "Æ" se trata como símbolo especial y se ordena antes de la letra "A" en el alfabeto.

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

Para obtener más información acerca de la comparación de cadenas, vea 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 de chino (RPC), con el nombre "zh-CN", admite una ordenación por pronunciación (predeterminada) y una ordenación por número de trazos. Cuando una aplicación crea un objeto CultureInfo usando un nombre de referencia cultural, por ejemplo zh-CN, se emplea el criterio de ordenación predeterminado. Para especificar el criterio de ordenación alternativo, la aplicación debe crear un objeto CultureInfo usando el identificador del criterio de ordenación alternativo. A continuación, la aplicación debe obtener un objeto CompareInfo a partir de CompareInfo para utilizarlo en comparaciones de cadenas. O bien, la aplicación puede crear directamente un objeto CompareInfo con el método CompareInfo.GetCompareInfo, que especifica el identificador correspondiente al criterio de ordenación alternativo.

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

Nombre de referencia cultural

Referencia cultural

Nombre e identificador de ordenación predeterminada

Nombre e identificador de ordenación alternativa

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 (RPC)

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 (Macao RAE)

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

Su aplicación puede utilizar el método CompareInfo.IndexOf sobrecargado para recuperar el índice con base cero de un carácter o subcadena dentro de una cadena especificada. Este método recupera un número entero negativo si el carácter o subcadena no se encuentra en la cadena especificada. Cuando se busca un carácter determinado mediante CompareInfo.IndexOf, la aplicación debe tener 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 este parámetro. Las sobrecargas del método que buscan un tipo de caracteres y no toman un parámetro CompareOptions, realizan una búsqueda que tiene en cuenta la referencia cultural. Esto significa que si un valor Unicode 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 (sin tener en cuenta la referencia cultural) en la que un tipo de caracteres se considere equivalente a otro tipo de caracteres sólo si los valores Unicode son los mismos, la aplicación debe utilizar una de las sobrecargas de CompareInfo.IndexOf, que toma un parámetro CompareOptions, y establecer el parámetro en el valor Ordinal.

Las aplicaciones también pueden utilizar sobrecargas del método String.IndexOf, que buscan un carácter para realizar una búsqueda ordinal (sin tener en cuenta la referencia cultural). Tenga presente que las sobrecargas de este método 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 recuperados por el método IndexOf en función de la referencia cultural. Se crea un objeto CultureInfo para da-DK, para la referencia cultural de danés (Dinamarca). A continuación, se utilizan las sobrecargas del método CompareInfo.IndexOf para buscar el carácter "Æ" en las cadenas "Æble" y "aeble". Tenga en cuenta que, para da-DK, el método CompareInfo.IndexOf que toma un parámetro CompareOptions establecido en Ordinal y el mismo método que no toma este parámetro recuperan lo mismo. El carácter "Æ" sólo se considera equivalente al valor del código 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 su aplicación reemplaza CultureInfo ci = new CultureInfo ("da-DK") por CultureInfo ci = new CultureInfo ("en-US"), el método CompareInfo.IndexOf cuyo parámetro CompareOptions está establecido en Ordinal y el mismo método sin este parámetro recuperarán resultados diferentes. La comparación que tiene en cuenta la referencia cultural realizada por el método CompareInfo.IndexOf 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 no recupera 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 en-US, que representa la referencia cultural de inglés (Estados Unidos), se genera la salida 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 a la aplicación ordenar las matrices en función de la propiedad CurrentCulture. En el ejemplo siguiente se crea una matriz de tres cadenas. En primer lugar, la propiedad Thread.CurrentThread.CurrentCulture se establece en en-US y se llama al método Array.Sort. El criterio de ordenación resultante se basa en las convenciones de ordenación de la referencia cultural de inglés (Estados Unidos). A continuación, la propiedad Thread.CurrentThread.CurrentCulture se establece en da-DK y se llama de nuevo al método Array.Sort. Observe que el criterio de ordenación resultante difiere del resultado de en-US porque se emplean las convenciones de ordenación correspondientes a la referencia cultural da-DK.

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

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, un criterio de ordenación puede contener una cadena de categorías alfabéticas, seguida de una cadena de prioridades de uso de mayúsculas y minúsculas, etc. Para obtener información adicional sobre los conceptos clave de ordenación, vea el estándar Unicode en la página principal de Unicode.

En .NET Framework, la clase SortKey asigna cadenas a sus claves de ordenación y viceversa. La aplicación puede utilizar el método CompareInfo.GetSortKey para 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 valor CompareOptions que indique. Por ejemplo, si la aplicación especifica el valor 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, la aplicación puede pasarla como parámetro a los métodos proporcionados por la clase SortKey. El método SortKey.Compare permite la comparación de las claves de ordenación. Debido a que este método realiza una comparación byte a byte simple, resulta mucho más rápido que utilizar String.Compare. Las aplicaciones que hacen un uso intensivo de la ordenación puede mejorar 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, la aplicación puede 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 CurrentCulture se establece en da-DK. Se comparan las dos cadenas mediante el método SortKey.Compare y se muestra el resultado. El método 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, la propiedad Thread.CurrentThread.CurrentCulture se establece en en-US y se crean las 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 varía en función del valor de CurrentCulture. Aunque el resultado del siguiente código de ejemplo es idéntico al resultado de la comparación de esas cadenas del ejemplo 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.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

Normalización

La aplicació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) en los que el criterio de ordenación coincide con el orden de los puntos de código (por ejemplo, A [65] va antes de B [66]).

La aplicación no debe basarse en los 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.

Para obtener más información sobre la normalización de cadenas, vea Normalización y ordenación.

Vea también

Conceptos

Operaciones de cadenas que no distinguen entre referencias culturales

Normalización y ordenación

Otros recursos

Codificación y localización