Partilhar via


Realizar comparações de cadeia de caracteres insensíveis à cultura

Por padrão, o método executa comparações que diferenciam a cultura e as maiúsculas String.Compare e minúsculas. Esse método também inclui várias sobrecargas que fornecem um culture parâmetro que permite especificar a cultura a ser usada e um comparisonType parâmetro que permite especificar as regras de comparação a serem 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ífica e deixa claro se uma comparação específica é sensível à cultura ou à cultura.

Nota

Ambas as String.CompareTo sobrecargas do método executam comparações sensíveis à cultura e às maiúsculas e minúsculas, não é possível usar esse método para realizar comparações que não diferenciam a cultura. Para clareza do código, recomendamos que você use o String.Compare método em vez disso.

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

As comparações de cadeia de caracteres insensíveis à cultura suportadas String.Compare pelo método são linguísticas (baseadas nas convenções de classificação da cultura invariante) ou não linguísticas (baseadas no valor ordinal dos caracteres na cadeia de caracteres). A maioria das comparações de cordas insensíveis à cultura são não-linguísticas. Para essas comparações, especifique o StringComparison.Ordinal valor ou StringComparison.OrdinalIgnoreCase enumeração como o comparisonType parâmetro. Por exemplo, se uma decisão de segurança (como uma comparação de nome de usuário ou senha) for baseada 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 idioma específico.

Use a comparação de cadeias linguísticas insensíveis à cultura se quiser lidar com cadeias de caracteres linguisticamente relevantes de várias culturas de forma consistente. Por exemplo, se seu aplicativo exibir palavras que usam vários conjuntos de caracteres em uma caixa de listagem, talvez você queira exibir palavras na mesma ordem, independentemente da cultura atual. Para comparações linguísticas insensíveis à cultura, o .NET define uma cultura invariante baseada nas convenções linguísticas do inglês. Para realizar uma comparação linguística insensível à cultura, especifique StringComparison.InvariantCulture ou StringComparison.InvariantCultureIgnoreCase como parâmetro comparisonType .

O exemplo a seguir executa duas comparações de cadeia de caracteres não linguísticas e 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 para sistemas operacionais Windows, e a Tabela de Elementos de Agrupamento Unicode Padrão, a tabela de peso de classificação para Linux e macOS.

Consulte também