CA1820: Testar para verificar se há cadeias de caracteres vazias usando o tamanho da cadeia de caracteres

Property Valor
ID da regra CA1820
Título Testar para verificar se há cadeias de caracteres vazias usando o tamanho da cadeia de caracteres
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

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

Descrição da regra

Comparar cadeias de caracteres usando a propriedade String.Length ou o método String.IsNullOrEmpty é mais rápido do que usar Equals. 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 Length valor da propriedade e compará-lo com zero.

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

Como corrigir violações

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

Quando suprimir avisos

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

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

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.CA1820.severity = none

Para obter mais informações, confira 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.");
        }
    }
}