Partilhar via


CA1862: Use as sobrecargas do método 'StringComparison' para executar comparações de cadeia de caracteres que não diferenciam maiúsculas de minúsculas

Property valor
ID da regra CA1862
Título Use as sobrecargas do método 'StringComparison' para executar comparações de cadeia de caracteres que não diferenciam maiúsculas de minúsculas
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

O código compara duas cadeias de caracteres de maneira que não diferencia maiúsculas de minúsculas chamando ToLower()pela primeira vez , , ToLowerInvariant()ToUpper()ou em uma ou ToUpperInvariant() ambas as cadeias de caracteres.

Descrição da regra

Quando chamadas ToLower()de código , , , ou , ToLowerInvariant()ToUpper()ToUpperInvariant()uma alocação é executada. Se o único motivo para chamar esses métodos for executar uma comparação ou pesquisa de cadeia de caracteres sem diferenciação de maiúsculas e minúsculas, a alocação será desnecessária. Em vez disso, você pode chamar um método de comparação de cadeia de caracteres que usa um e especifica um StringComparison dos *IgnoreCase valores.

Como corrigir violações

Remova a chamada para ToLower(), , , ou , ToLowerInvariant()ToUpper()e chame um dos métodos ou ToUpperInvariant()um dos StringComparer seguintes métodos que usa um StringComparison argumento:

Nota

  • Se você alterar seu código para usar uma sobrecarga que usa um StringComparison argumento, isso pode causar alterações sutis no comportamento. É importante realizar testes completos se você fizer essa alteração ou aceitar a sugestão de lâmpada do Visual Studio.
  • Se as cordas não precisam ser comparadas de uma maneira culturalmente sensível, considere passar StringComparison.OrdinalIgnoreCase.

Exemplo

O exemplo a seguir mostra uma violação da regra:

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

O exemplo a seguir mostra o código que corrige a violação:

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

Quando suprimir avisos

É seguro suprimir avisos dessa regra se o desempenho não for uma preocupação.

Se você estiver usando o Entity Framework Core (EF Core), deverá suprimir essa regra para cenários em que está consultando um banco de dados comparando uma cadeia de caracteres. O EF Core lança uma exceção se você usar um método como String.Equals(String, StringComparison) o que usa um StringComparison argumento, pois ele não traduzirá essas consultas para SQL. Para obter mais informações, consulte Tradução de operações de cadeia de caracteres .NET internas.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA1862
// The code that's violating the rule is on this line.
#pragma warning restore CA1862

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1862.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.