Compartilhar via


teste para seqüências de caracteres vazias usando o comprimento da seqüência de caracteres

TypeName

TestForEmptyStringsUsingStringLength

CheckId

CA1820

Category (Categoria)

Microsoft.desempenho

Quebrando alterar

Não separável

Causa

Uma seqüência de caracteres é comparado com a seqüência de caracteres vazia usando Object.Equals.

Descrição da regra

Comparação de cadeias de caracteres usando o String.Length propriedade ou o String.IsNullOrEmpty método é significativamente mais rápido do que usar Equals. Isso ocorre porque o Equals executa instruções MSIL significativamente mais que qualquer um IsNullOrEmpty ou o número de instruções executadas para recuperar o Length propriedade de valor e compará-lo a zero.

Você deve estar ciente que Equals e Length == 0 se comportam de maneira diferente para nulo cadeias de caracteres. Se você tentar obter o valor do Length propriedade em uma seqüência de caracteres nula, a Common linguagem tempo de execução lança um System.NullReferenceException. Se você realizar uma comparação entre uma seqüência de caracteres nula e a seqüência de caracteres vazia, o Common linguagem tempo de execução não lançar uma exceção; a comparação retorna false. Testando para nulo não afeta significativamente o desempenho relativo dessas duas abordagens.Quando o direcionamento .NET Framework 2,0, use o IsNullOrEmpty método. Caso contrário, use o Length == comparação sempre que possível.

Como corrigir violações

Para corrigir uma violação dessa regra, altere a comparação para usar o Length propriedade e teste para a seqüência de caracteres nula. Se o objetivo de .NET Framework 2,0, use o IsNullOrEmpty método.

Quando suprimir avisos

É seguro eliminar um aviso essa regra se o desempenho não for um problema.

Exemplo

O exemplo a seguir ilustra as técnicas diferentes que são usadas para procurar uma seqüência 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.");
         }
      }
   }
}