Megosztás a következőn keresztül:


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örés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A sztringeket az üres sztringhez hasonlítjuk össze a használatával Object.Equals.

Szabály leírása

A tulajdonságot vagy a String.IsNullOrEmpty metódust használó String.Length sztringek összehasonlítása gyorsabb, mint a használataEquals. 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, Equals és <string>.Length == 0 viselkedjen másképp. Ha null sztringre próbálja lekérni a Length tulajdonság értékét, a közös nyelvi futtatókörnyezet egy System.NullReferenceException. 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. A 2.0-s vagy újabb .NET-keretrendszer célzáskor használja a metódustIsNullOrEmpty. 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 el lehet tiltani a szabály figyelmeztetését.

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