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

De manera predeterminada, el método Compare realiza comparaciones que tienen en cuenta las referencias culturales y las mayúsculas y minúsculas. Sin embargo, se proporciona una sobrecarga del método String.Compare, lo que permite especificar la referencia cultural suministrando un parámetro de referencia cultural. El código de la aplicación debería mostrar claramente si se pretende que una comparación de cadenas tenga en cuenta las referencias culturales o no. En operaciones que tienen en cuenta las referencias culturales, especifique la propiedad CultureInfo.CurrentCulture como el parámetro de referencia cultural. En operaciones que no tienen en cuenta las referencias culturales, especifique la propiedad CultureInfo.InvariantCulture como el parámetro de referencia cultural.

Si una decisión de seguridad se basa en el resultado de una comparación de cadenas, la operación no debería tener en cuenta las referencias culturales para asegurarse de que el resultado no se vea afectado por el valor de CultureInfo.CurrentCulture. Vea Asignaciones personalizadas de mayúsculas y minúsculas, y reglas de ordenación para obtener un ejemplo que muestra cómo las comparaciones de cadenas que tienen en cuenta las referencias culturales pueden generar resultados incoherentes.

Las sobrecargas del método String.CompareTo realizan comparaciones que tienen en cuenta las referencias culturales y las mayúsculas y minúsculas de manera predeterminada. Sin embargo, no se proporcionan sobrecargas de este método que permitan especificar una comparación que no tenga en cuenta las referencias culturales Para lograr claridad en el código, se recomienda usar el método String.Compare en su lugar, especificando CultureInfo.CurrentCulture para operaciones que tengan en cuenta las referencias culturales y CultureInfo.InvariantCulture para operaciones que no las tengan en cuenta.

Utilizar el método String.Compare

En la siguiente línea de código se muestra cómo utilizar el método String.Compare para realizar una comparación entre string1 y string2 que tenga en cuenta las referencias culturales y las mayúsculas y minúsculas. CultureInfo.CurrentCulture se pasa como el parámetro de referencia cultural, indicando que se utilizarán las asignaciones de mayúsculas y minúsculas y las reglas de ordenación para CurrentCulture.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

Para obtener un ejemplo de código completo que muestre cómo usar el método String.Compare para realizar comparaciones que tengan en cuenta las referencias culturales, vea Comparar y ordenar datos para una referencia cultural específica.

Para hacer que esta operación no tenga en cuenta las referencias culturales, debe especificarse CultureInfo.InvariantCulture como el parámetro de referencia cultural. Esto se muestra en el siguiente ejemplo de línea de código:

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

En el siguiente ejemplo de código se muestra cómo realizar una comparación de cadenas que no tenga en cuenta las referencias culturales utilizando la línea de código anterior.

Imports System
Imports System.Globalization

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        
        Dim compareResult As Integer = String.Compare(string1, string2, _
            False, CultureInfo.InvariantCulture)   
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is _
            {2}", string1, string2, compareResult)
    End Sub
End Class
using System;
using System.Globalization;

public class CompareSample
{
    public static void Main()
    {
        String string1 = "file";
        String string2 = "FILE";

        int compareResult = String.Compare(string1, string2, false, 
        CultureInfo.InvariantCulture);
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is 
            {2}", string1, string2, compareResult);
    }
}

Utilizar el método String.CompareTo

En el siguiente ejemplo se utiliza el método String.CompareTo para realizar una comparación entre string1 y string2. De manera predeterminada, la comparación tiene en cuenta las referencias culturales y las mayúsculas y minúsculas.

Dim compareResult As Integer = string1.CompareTo(string2)
int compareResult = string1.CompareTo(string2);

Debido a que un parámetro de referencia cultural no se pasa explícitamente, el objetivo del ejemplo anterior es ambiguo; se debería reemplazar el método String.CompareTo con el método String.Compare para aclarar si se desea que esta operación tenga en cuenta las referencias culturales o no. Si tiene la intención de realizar una comparación entre string1 y string2 que tenga en cuenta las referencias culturales y las mayúsculas y minúsculas, pase CultureInfo.CurrentCulture como el parámetro de referencia cultural. Esto hace que se usen las asignaciones de mayúsculas y minúsculas y las reglas de ordenación para CurrentCulture. Esto último se muestra en el ejemplo siguiente.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

Si tiene la intención de realizar una comparación entre string1 y string2 que no tenga en cuenta las referencias culturales y las mayúsculas y minúsculas, pase CultureInfo.InvariantCulture como el parámetro de referencia cultural. Esto hace que se usen las asignaciones de mayúsculas y minúsculas y las reglas de ordenación para InvariantCulture. Esto último se muestra en el ejemplo siguiente.

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

Para obtener un ejemplo de código completo que muestre cómo usar el método String.Compare para obtener resultados que no tengan en cuenta las referencias culturales, vea Utilizar el método String.Compare.

Vea también

Referencia

String.Compare Method
String.CompareTo Method

Conceptos

Comparar y ordenar datos para una referencia cultural específica

Otros recursos

Realizar operaciones de cadenas que no distinguen entre referencias culturales