Partilhar via


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