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