Compartir a través de


Realizar comparaciones de cadenas que no tienen en cuenta las referencias culturales

De manera predeterminada, el método String.Compare realiza comparaciones que tienen en cuenta las referencias culturales y las mayúsculas y minúsculas. Este método también incluye varias sobrecargas que proporcionan un parámetro culture que permite especificar la referencia cultural que se va a utilizar y un parámetro comparisonType que permite especificar las reglas de comparación que se van a usar. Al llamar a estos métodos en lugar de a la sobrecarga predeterminada, se quita cualquier ambigüedad sobre las reglas que se utilizan en una determinada llamada al método y se establece claramente si una determinada comparación tiene en cuenta o no la referencia cultural.

NotaNota

Las dos sobrecargas del método String.CompareTo realizan comparaciones que tienen en cuenta la referencia cultural y que distinguen mayúsculas de minúsculas, así que no puede usar este método para realizar comparaciones que no tengan en cuenta la referencia cultural.Para lograr claridad en el código, recomendamos utilizar el método String.Compare en su lugar.

En operaciones que tienen en cuenta las referencias culturales, especifique el valor de enumeración StringComparison.CurrentCulture o StringComparison.CurrentCultureIgnoreCase como parámetro comparisonType. Si desea realizar una comparación que tenga en cuenta la referencia cultural utilizando una referencia cultural designada distinta de la referencia cultural actual, especifique el objeto CultureInfo que representa esa referencia cultural como parámetro culture .

Las comparaciones de cadenas que no tienen en cuenta la referencia cultural admitidas por el método String.Compare pueden ser lingüísticas (se basan en las convenciones de ordenación de la referencia cultural de todos los idiomas) o no lingüísticas (se basan en el valor ordinal de los caracteres de la cadena). La mayoría de las comparaciones de cadenas que no tienen en cuenta la referencia cultural son no lingüísticas. En estas comparaciones, especifique el valor de enumeración StringComparison.Ordinal u StringComparison.OrdinalIgnoreCase como parámetro comparisonType. Por ejemplo, si una decisión de seguridad (como una comparación de nombre de usuario o contraseña) está basada en el resultado de una comparación de cadenas, la operación no debe tener en cuenta la referencia cultural y debe ser no lingüística para garantizar que el resultado no se ve afectado por las convenciones de una determinada referencia cultural o idioma. (Vea Asignaciones personalizadas de mayúsculas y minúsculas, y reglas de ordenación para obtener un ejemplo en el que se muestra cómo las comparaciones de cadenas dependientes de la referencia cultural pueden generar resultados incoherentes).

Utilice una comparación de cadenas de tipo lingüística y que tenga en cuenta la referencia cultural si desea administrar lingüísticamente las cadenas pertinentes de varias referencias culturales de forma coherente. Por ejemplo, si la aplicación muestra palabras que utilizan varios juegos de caracteres en un cuadro de lista, tal vez desee mostrar las palabras en el mismo orden sin tener en cuenta la referencia cultural actual. En las comparaciones lingüísticas que no tienen en cuenta la referencia cultural, .NET Framework define una referencia cultural de todos los idiomas que está basada en las convenciones lingüísticas del inglés. Para realizar una comparación lingüística que no tenga en cuenta la referencia cultural, especifique StringComparison.InvariantCulture o StringComparison.InvariantCultureIgnoreCase como parámetro comparisonType.

En el siguiente ejemplo se realizan dos comparaciones de cadenas no lingüísticas que no tienen en cuenta la referencia cultural. La primera comparación distingue mayúsculas de minúsculas, pero la segunda no.

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        Dim compareResult As Integer

        compareResult = String.Compare(string1, string2, _
                                       StringComparison.Ordinal)   
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult) 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult) 
    End Sub
End Class
' The example displays the following output:
'    Ordinal comparison of 'file' and 'FILE': 32
'    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
using System;

public class CompareSample
{
    public static void Main()
    {
        string string1 = "file";
        string string2 = "FILE";
        int compareResult = 0;

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.Ordinal);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult); 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult); 
    }
}
// The example displays the following output:
//    Ordinal comparison of 'file' and 'FILE': 32
//    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0

Vea también

Referencia

String.Compare

String.CompareTo

Conceptos

Comparar y ordenar datos para una referencia cultural específica

Procedimientos recomendados para el uso de cadenas en .NET Framework

Otros recursos

Realizar operaciones de cadenas que no distinguen entre referencias culturales

Historial de cambios

Fecha

Historial

Motivo

Mayo de 2010

Se han revisado los procedimientos recomendados para administrar cadenas.

Corrección de errores de contenido.