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


CA1836: Az IsEmpty előnyben részesítve a darabszámot, ha elérhető

Tulajdonság Érték
Szabályazonosító CA1836
Cím Az IsEmpty előnyben részesítve a Darabszámot, ha elérhető
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 Javaslatként

Ok

A Count vagy tulajdonságot Length vagy a Count<TSource>(IEnumerable<TSource>) bővítménymetódust arra használták, hogy megállapítsa, hogy az objektum tartalmaz-e elemeket az érték 0 vagy 1az objektum összehasonlításával, és az objektumnak hatékonyabb IsEmpty tulajdonsága van, amelyet használhat helyette.

Szabály leírása

Ez a szabály jelzi a tulajdonságokra Count vagy LongCount<TSource>(IEnumerable<TSource>)LengthCount<TSource>(IEnumerable<TSource>) LINQ-metódusokra irányuló hívásokat, ha azok alapján állapítja meg, hogy az objektum tartalmaz-e elemeket, és az objektum hatékonyabb IsEmpty tulajdonsággal rendelkezik.

A szabály elemzése eredetileg átfedésben volt a CA1827, a CA1828 és a CA1829 hasonló szabályokkal; az ilyen szabályok elemzőit egyesítették a CA1836-hoz tartozóval, hogy átfedés esetén a legjobb diagnózist jelentse.

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

A szabálysértés kijavításához cserélje le a Count<TSource>(IEnumerable<TSource>) metódushívást LongCount<TSource>(IEnumerable<TSource>) vagy a LengthCount tulajdonsághozzáférést, ha egy olyan műveletben használják, amely megállapítja, hogy az objektum üres-e a IsEmpty tulajdonsághozzáférés használatával. A következő két kódrészlet például a szabály megsértését és a hiba elhárítását mutatja be:

using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.IsEmpty;
}

Tipp.

Ehhez a szabályhoz kódjavítás érhető el a Visual Studióban. A használathoz helyezze a kurzort a szabálysértésre, és nyomja le a Ctrl+ billentyűt. (pont). A "Darabszám" helyett válassza az IsEmpty előnyben részesítése lehetőséget annak megállapításához, hogy az objektum tartalmaz-e elemeket a megjelenő lehetőségek listájából.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

Mikor kell letiltani a figyelmeztetéseket?

A szabály megsértését nyugodtan letilthatja, ha nem aggódik a szükségtelen elemek számbavételének teljesítménybeli hatása miatt a darabszám kiszámításához.

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 CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836

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.CA1836.severity = none

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

Kapcsolódó információk