Share via


CA1820: Testen op lege tekenreeksen met tekenreekslengte

Eigenschappen Weergegeven als
Regel-id CA1820
Titel Testen op lege tekenreeksen met tekenreekslengte
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Een tekenreeks wordt vergeleken met de lege tekenreeks met behulp van Object.Equals.

Beschrijving van regel

Het vergelijken van tekenreeksen met behulp van de String.Length eigenschap of de String.IsNullOrEmpty methode is sneller dan het gebruik van Equals. Dit komt doordat Equals er aanzienlijk meer CIL-instructies worden uitgevoerd dan IsNullOrEmpty of het aantal instructies dat is uitgevoerd om de Length eigenschapswaarde op te halen en deze te vergelijken met nul.

Voor null-tekenreeksen Equals en <string>.Length == 0 zich anders gedragen. Als u de waarde van de Length eigenschap op een null-tekenreeks probeert op te halen, genereert de algemene taalruntime een System.NullReferenceException. Als u een vergelijking uitvoert tussen een null-tekenreeks en de lege tekenreeks, genereert de algemene taalruntime geen uitzondering en retourneert falsedeze. Testen op null heeft geen invloed op de relatieve prestaties van deze twee benaderingen. Gebruik de IsNullOrEmpty methode wanneer u zich richt op .NET Framework 2.0 of hoger. Gebruik anders waar mogelijk de Length vergelijking == 0.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, wijzigt u de vergelijking om de IsNullOrEmpty methode te gebruiken.

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als de prestaties geen probleem zijn.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Opmerking

In het volgende voorbeeld ziet u de verschillende technieken die worden gebruikt om te zoeken naar een lege tekenreeks.

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