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