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


CA1828: Ne használja a CountAsync/LongCountAsync parancsot, ha az AnyAsync használható

Tulajdonság Érték
Szabályazonosító CA1828
Cím Ne használja a CountAsync/LongCountAsync parancsot, ha az AnyAsync használható
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

Az CountAsync vagy LongCountAsync a módszer volt használva, ahol a AnyAsync módszer hatékonyabb lenne.

Szabály leírása

Ez a szabály megjelöli azokat a CountAsync LINQ-metódushívásokat LongCountAsync , amelyeket annak ellenőrzésére használnak, hogy a gyűjtemény rendelkezik-e legalább egy elemet. Ezek a metódushívások a teljes gyűjtemény számbavételét igénylik a szám kiszámításához. Ugyanez az ellenőrzés gyorsabb a AnyAsync metódussal, mivel elkerüli a gyűjtemény számbavételét.

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

A szabálysértés kijavításához cserélje le a CountAsync metódushívást LongCountAsync a AnyAsync metódusra. 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.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;

class C
{
    public async Task<string> M1Async(IQueryable<string> list)
        => await list.CountAsync() != 0 ? "Not empty" : "Empty";

    public async Task<string> M2Async(IQueryable<string> list)
        => await list.LongCountAsync() > 0 ? "Not empty" : "Empty";
}
using System.Linq;
using System.Threading.Tasks;
using static Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions;

class C
{
    public async Task<string> M1Async(IQueryable<string> list)
        => await list.AnyAsync() ? "Not empty" : "Empty";

    public async Task<string> M2Async(IQueryable<string> list)
        => await list.AnyAsync() ? "Not empty" : "Empty";
}

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). Válassza a Ne használja a CountAsync() vagy a LongCountAsync() lehetőséget, ha az AnyAsync() használható a bemutatott lehetőségek listájából.

Code fix for CA1828 - Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used

Mikor kell letiltani a figyelmeztetéseket?

A szabály megsértését nyugodtan letilthatja, ha nem aggódik a szükségtelen gyűjtemények számbavételének teljesítményre gyakorolt 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 CA1828
// The code that's violating the rule is on this line.
#pragma warning restore CA1828

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

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

Kapcsolódó információk