Sdílet prostřednictvím


CA1820: Testujte prázdné řetězce pomocí délky řetězce

Název_typu

TestForEmptyStringsUsingStringLength

CheckId

CA1820

Kategorie

Microsoft.Performance

Změnit rozdělení

Bez rozdělení

Příčina

Řetězec je prázdný řetězec porovnání pomocí Object.Equals.

Popis pravidla

Porovnání řetězce pomocí String.Length vlastnost nebo String.IsNullOrEmpty je výrazně rychlejší než použití metody Equals.Důvodem je, že Equals podstatně více MSIL instrukce než buď provádí IsNullOrEmpty nebo počet instrukcí, které jsou provedeny k načtení Length vlastnost hodnotu a porovnat na nulu.

Je třeba věnovat pozornost, Equals a Length == 0 chovat odlišně pro prázdné řetězce.Při pokusu získat hodnotu Length vlastnost na řetězec null společného jazykového modulu runtime vyvolá NullReferenceException.Pokud provádíte porovnání nulový řetězec prázdný řetězec, společný jazykový modul runtime není vyvoláním výjimky; Vrátí srovnání false.Testování null neovlivňuje významně relativní výkon těchto dvou přístupů.Při cílení na .NET Framework 2,0, použít IsNullOrEmpty metoda.Jinak použijte Length == porovnání, kdykoli je to možné.

Jak opravit porušení

Porušení tohoto pravidla opravit, změnit porovnání použít Length vlastnost a test nulový řetězec.Pokud cílení .NET Framework 2,0, použít IsNullOrEmpty metoda.

Při potlačení upozornění

Je bezpečné potlačí upozornění od tohoto pravidla, pokud výkon není problém.

Příklad

Následující příklad ukazuje různé techniky, které slouží k vyhledání prázdný řetězec.

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