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.");
}
}
}