Partilhar via


CA1820: Teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres

Property valor
ID da regra CA1820
Título Teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Motivo

Uma cadeia de caracteres é comparada à cadeia de caracteres vazia usando Object.Equals.

Descrição da regra

Comparar cadeias de caracteres usando a String.Length propriedade ou o String.IsNullOrEmpty método é mais rápido do que usar Equalso . Isso ocorre porque Equals executa significativamente mais instruções CIL do que qualquer uma IsNullOrEmpty ou o número de instruções executadas para recuperar o valor da Length propriedade e compará-lo com zero.

Para cadeias de caracteres Equals nulas e <string>.Length == 0 comportam-se de forma diferente. Se você tentar obter o Length valor da propriedade em uma cadeia de caracteres nula, o common language runtime lançará um System.NullReferenceExceptionarquivo . Se você executar uma comparação entre uma cadeia de caracteres nula e a cadeia vazia, o common language runtime não lançará uma exceção e retornará false. O teste de nulo não afeta significativamente o desempenho relativo dessas duas abordagens. Ao direcionar o .NET Framework 2.0 ou posterior, use o IsNullOrEmpty método. Caso contrário, use a Length comparação == 0 sempre que possível.

Como corrigir violações

Para corrigir uma violação dessa regra, altere a comparação para usar o IsNullOrEmpty método.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se o desempenho não for um problema.

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 CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

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

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

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

Exemplo

O exemplo a seguir ilustra as diferentes técnicas usadas para procurar uma cadeia de caracteres vazia.

public class StringTester
{
    string s1 = "test";

    public void EqualsTest()
    {
        // Violates rule: TestForEmptyStringsUsingStringLength.
        if (s1 == "")
        {
            Console.WriteLine("s1 equals empty string.");
        }
    }

    // Use for .NET Framework 1.0 and 1.1.
    public void LengthTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (s1 != null && s1.Length == 0)
        {
            Console.WriteLine("s1.Length == 0.");
        }
    }

    // Use for .NET Framework 2.0.
    public void NullOrEmptyTest()
    {
        // Satisfies rule: TestForEmptyStringsUsingStringLength.
        if (!String.IsNullOrEmpty(s1))
        {
            Console.WriteLine("s1 != null and s1.Length != 0.");
        }
    }
}