CA1828: Nepoužívejte CountAsync/LongCountAsync, pokud je možné použít AnyAsync
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1828 |
Název | Nepoužívejte CountAsync/LongCount, když se dá použít AnyAsync |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Použili CountAsync jsme metoduAnyAsync, LongCountAsync ve které by byla metoda efektivnější.
Popis pravidla
Toto pravidlo označí CountAsync volání metody LINQ LongCountAsync a používá se ke kontrole, jestli kolekce obsahuje alespoň jeden prvek. Tato volání metody vyžadují výčet celé kolekce pro výpočet počtu. Stejná kontrola je u metody rychlejší AnyAsync , protože se vyhne výčet kolekce.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte CountAsync volání metody metodou AnyAsync LongCountAsync. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:
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
Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Pokud ho chcete použít, umístěte kurzor na porušení a stiskněte ctrl+. (tečka). Zvolte Možnost Nepoužívat CountAsync() nebo LongCountAsync(), pokud je možné použít anyAsync() ze seznamu zobrazených možností.
Kdy potlačit upozornění
Je bezpečné potlačit porušení tohoto pravidla, pokud vás nezajímá dopad na výkon z nepotřebného výčtu kolekce pro výpočet počtu.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1828
// The code that's violating the rule is on this line.
#pragma warning restore CA1828
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1828.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Související pravidla
- CA1826: Místo metody Linq Enumerable použijte vlastnost
- CA1827: Nepoužívejte Počet/LongCount, pokud lze použít libovolnou možnost
- CA1829: Místo metody Enumerable.Count použijte vlastnost Length/Count.