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