Share via


CA1820: Testa för tomma strängar med stränglängd

Property Värde
Regel-ID CA1820
Title Testa för tomma strängar med stränglängd
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En sträng jämförs med den tomma strängen med hjälp Object.Equalsav .

Regelbeskrivning

Det går snabbare att jämföra strängar med egenskapen String.Length eller String.IsNullOrEmpty metoden än att använda Equals. Detta beror på att Equals kör betydligt fler CIL-instruktioner än någon IsNullOrEmpty av eller antalet instruktioner som körs för att hämta Length egenskapsvärdet och jämföra det med noll.

För null-strängar Equals och <string>.Length == 0 beter sig annorlunda. Om du försöker hämta värdet Length för egenskapen på en null-sträng genererar den vanliga språkkörningen en System.NullReferenceException. Om du gör en jämförelse mellan en null-sträng och den tomma strängen utlöser inte common language runtime ett undantag och returnerar false. Testning för null påverkar inte den relativa prestandan för dessa två metoder avsevärt. Använd metoden när du riktar in dig på .NET Framework 2.0 eller senare IsNullOrEmpty . Annars använder du jämförelsen Length == 0 när det är möjligt.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln ändrar du jämförelsen så att metoden IsNullOrEmpty används.

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om prestanda inte är ett problem.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel

I följande exempel visas de olika tekniker som används för att leta efter en tom sträng.

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