CA1820: Üres sztringek tesztelése karakterlánchossz használatával

Tulajdonság Érték
Szabályazonosító CA1820
Cím Üres sztringek tesztelése karakterlánchossz használatával
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik nem-törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

Egy sztringet egy üres sztringhez hasonlítunk össze Object.Equals használatával.

Szabály leírása

A String.Length tulajdonság vagy a String.IsNullOrEmpty metódus használatával történő sztringösszehasonlítás gyorsabb, mint a Equals használata. Ennek az az oka, hogy Equals lényegesen több CIL-utasítást hajt végre, mint bármelyik IsNullOrEmpty , vagy a végrehajtott utasítások száma a Length tulajdonságérték lekéréséhez és nullához való összehasonlításához.

Null sztringek esetén a Equals és a <string>.Length == 0 eltérően viselkednek. Ha megpróbálja lekérni a Length tulajdonság értékét egy null értékű sztringen, a közös nyelvi futtatókörnyezet egy System.NullReferenceException-t dob. Ha egy null sztring és az üres sztring összehasonlítását hajtja végre, a közös nyelvi futtatókörnyezet nem ad kivételt, és visszaadja a függvényt false. A null érték tesztelése nem befolyásolja jelentősen e két megközelítés relatív teljesítményét. Amikor a 2.0-s vagy újabb .NET-keretrendszert célozza meg, használja a IsNullOrEmpty metódust. Ellenkező esetben használja a Length == 0 összehasonlítást, amikor csak lehetséges.

Szabálysértések kijavítása

A szabály megsértésének kijavításához módosítsa az összehasonlítást a IsNullOrEmpty metódus használatára.

Mikor kell letiltani a figyelmeztetéseket?

Ha a teljesítmény nem probléma, nyugodtan figyelmen kívül lehet hagyni a szabály által generált figyelmeztetést.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Példa

Az alábbi példa az üres karakterláncok keresésére használt különböző technikákat mutatja be.

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