CA1820: teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres
TypeName |
TestForEmptyStringsUsingStringLength |
CheckId |
CA1820 |
Categoria |
Microsoft.Performance |
Alteração Significativa |
Sem quebra |
Causa
Uma cadeia de caracteres é comparada à cadeia de caracteres vazia usando Object.Equals.
Descrição da Regra
Comparar que usam usando a propriedade de String.Length ou o método de String.IsNullOrEmpty é muito mais rápido do que usando Equals.Isso ocorre porque Equals executa significativamente mais instruções de MSIL do que IsNullOrEmpty ou o número de instruções executadas para recuperar o valor da propriedade de Length e para o comparar a zero.
Lembre-se de que Equals e == 0 de Length se comportam diferentemente das cadeias de caracteres nulas.Se você tenta obter o valor da propriedade de Length em uma cadeia de caracteres nula, Common Language Runtime gerencie NullReferenceException.Se você executa uma comparação entre uma cadeia de caracteres nula e a cadeia de caracteres vazia, Common Language Runtime não gerará uma exceção; a comparação retorna false.Os testes para nulo não afetam significativamente o desempenho em relação dessas duas abordagens.O destino .NET Framework 2,0, use o método de IsNullOrEmpty .Se não, use a comparação == de Length sempre que possível.
Como Corrigir Violações
Para corrigir uma violação desta regra, altere a comparação para usar a propriedade e o teste de Length para a cadeia de caracteres nula.Se .NET Framework 2,0destino, use o método de IsNullOrEmpty .
Quando Suprimir Alertas
É seguro suprimir um aviso dessa regra se o desempenho não é um problema.
Exemplo
O exemplo a seguir ilustra as técnicas diferentes que são usadas para procurar uma cadeia de caracteres vazia.
using System;
namespace PerformanceLibrary
{
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.");
}
}
}
}