CA1828: Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt

Eigenschap Waarde
Regel-id CA1828
Titel Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

De CountAsync of LongCountAsync methode is gebruikt waar de AnyAsync methode efficiënter zou zijn.

Beschrijving van regel

Deze regel markeert de aanroepen van de LINQ-methodes CountAsync en LongCountAsync die worden gebruikt om te controleren of de verzameling ten minste één element bevat. Voor deze methodeaanroepen moet de hele verzameling worden opgesomd om het aantal te berekenen. Dezelfde controle is sneller met de AnyAsync methode, omdat hiermee wordt voorkomen dat de verzameling wordt opgesomd.

Hoe schendingen op te lossen

Als u een schending wilt oplossen, vervangt u de CountAsync aanroep of LongCountAsync methode door de AnyAsync methode. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:

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

Tip

Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Om het te gebruiken, plaatst u de cursor op de overtreding en drukt u op Ctrl+. (punt). Kies Niet CountAsync() of LongCountAsync() gebruiken wanneer AnyAsync() kan worden gebruikt in de lijst met opties die worden weergegeven.

Codefix voor CA1828 - Gebruik CountAsync() of LongCountAsync() niet wanneer AnyAsync() kan worden gebruikt

Wanneer waarschuwingen onderdrukken

Het is veilig om een schending van deze regel te onderdrukken als u zich geen zorgen maakt over de gevolgen voor de prestaties van onnodige inventarisatie van verzamelingen om het aantal te berekenen.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook