Executar comparações de cadeias de caracteres sem diferenciação de cultura

Por padrão, o método String.Compare executa comparações sensíveis à cultura e com diferenciação de maiúsculas e minúsculas. Esse método também inclui várias sobrecargas que fornecem um parâmetro culture que permite especificar a cultura a ser usada e um parâmetro comparisonType que permite especificar as regras de comparação que serão usadas. Chamar esses métodos em vez da sobrecarga padrão remove qualquer ambiguidade sobre as regras usadas em uma chamada de método específico e a torna claro se uma comparação é sensível à cultura ou não.

Observação

Ambas as sobrecargas do método String.CompareTo executam comparações sensíveis à cultura e comparações com diferenciação de maiúsculas e minúsculas. você não pode usar esse método para executar comparações insensíveis à cultura. Para fins de clareza de código, recomenda-se usar o método String.Compare em vez disso.

Para operações sensíveis à cultura, especifique o valor da enumeração StringComparison.CurrentCulture ou StringComparison.CurrentCultureIgnoreCase como o parâmetro de comparisonType. Se você desejar executar uma comparação sensível à cultura usando uma cultura específica diferente da cultura atual, especifique o objeto CultureInfo que representa a cultura como o parâmetro culture.

As comparações de cadeias de caracteres insensíveis à cultura suportadas pelo método String.Compare são linguísticas (com base nas convenções de classificação de cultura invariável) ou não linguísticas (com base no valor ordinal dos caracteres na cadeia de caracteres). A maioria das comparações de cadeias de caracteres insensíveis cultura são não linguísticas. Para essas comparações, especifique o valor da enumeração StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase como o parâmetro de comparisonType. Por exemplo, se uma decisão de segurança (como uma comparação de nome de usuário ou senha) baseia-se no resultado de uma comparação de cadeia de caracteres, a operação deve ser insensível à cultura e não linguística para garantir que o resultado não seja afetado pelas convenções de uma cultura ou de um idioma específico.

Use a comparação de cadeia de caracteres linguística insensível à cultura se não desejar tratar cadeias de caracteres linguisticamente relevantes de várias culturas de uma maneira consistente. Por exemplo, se o seu aplicativo exibe palavras que usam vários conjuntos de caracteres em uma caixa de listagem, talvez você queira exibir as palavras na mesma ordem, independentemente da cultura atual. Em comparações linguísticas sem diferenciação de cultura, o .NET define uma cultura invariável de acordo com as convenções linguísticas da língua inglesa. Para executar uma comparação linguística insensível à cultura, especifique StringComparison.InvariantCulture ou StringComparison.InvariantCultureIgnoreCase como o parâmetro de comparisonType.

O exemplo a seguir executa duas comparações de cadeias de caracteres não linguísticas insensíveis à cultura. A primeira diferencia maiúsculas de minúsculas, mas a segunda não.

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

Você pode baixar as Tabelas de peso de classificação, um conjunto de arquivos de texto que contêm informações sobre os pesos de caracteres usados em operações de classificação e comparação dos sistemas operacionais Windows, e a Tabela de elemento de ordenação Unicode padrão, a tabela de peso de classificação para Linux e macOS.

Confira também