CA1858: usar "StartsWith" em vez de "IndexOf"

Property Valor
ID da regra CA1858
Título Usar StartsWith em vez de IndexOf
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

String.IndexOf é chamado e o resultado é comparado com zero.

Descrição da regra

É mais eficiente e mais claro chamar String.StartsWith do que chamar String.IndexOf e comparar o resultado com zero para determinar se uma cadeia de caracteres começa com um determinado prefixo.

IndexOf pesquisa a cadeia de caracteres inteira, enquanto StartsWith só a compara no início da cadeia de caracteres.

Como corrigir violações

Substitua a chamada para String.IndexOf por uma chamada para String.StartsWith.

Exemplo

O seguinte snippet de código mostra uma violação do CA1858:

bool M(string s)
{
    return s.IndexOf("abc") == 0;
}
Function M(s As String) As Boolean
    Return s.IndexOf("abc") = 0
End Function

O seguinte snippet de código conserta a violação:

bool M(string s)
{
    return s.StartsWith("abc");
}
Function M(s As String) As Boolean
    Return s.StartsWith("abc")
End Function

Quando suprimir avisos

É seguro fechar esse aviso se o desempenho não é uma preocupação.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

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

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

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