Compartir a través de


Comparación 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.

Nota:

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.

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 define una referencia cultural invariable 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.

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
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

Puede descargar las tablas de pesos de ordenación, un conjunto de archivos de texto que contienen información sobre los pesos de caracteres que se usan en las operaciones de ordenación y comparación para los sistemas operativos Windows, además de la tabla de elementos de intercalación Unicode predeterminada, que se trata de la tabla de pesos de ordenación para Linux y macOS.

Vea también