CA1826: Místo metody Linq Enumerable použijte vlastnost
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1826 |
Název | Použijte vlastnost namísto vyčíslitelné metody Linq |
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
Metoda Enumerable LINQ byla použita u typu, který podporuje ekvivalentní, efektivnější vlastnost.
Popis pravidla
Toto pravidlo označí Enumerable volání metody LINQ u kolekcí typů, které mají ekvivalentní, ale efektivnější vlastnosti pro načtení stejných dat.
Toto pravidlo analyzuje typy kolekcí, které implementují IReadOnlyList<T> , ale ne IList<T>.
Toto pravidlo označuje volání následujících metod pro tyto typy kolekcí:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Analyzované typy a metody kolekce mohou být v budoucnu rozšířeny, aby zahrnovaly více případů.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte Enumerable volání metody přístupem k vlastnosti. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:
using System;
using System.Collections.Generic;
using System.Linq;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list.First());
Console.Write(list.Last());
Console.Write(list.Count());
}
}
using System;
using System.Collections.Generic;
class C
{
public void M(IReadOnlyList<string> list)
{
Console.Write(list[0]);
Console.Write(list[list.Count - 1]);
Console.Write(list.Count);
}
}
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). V zobrazeném seznamu možností zvolte Použít indexer .
Kdy potlačit upozornění
Je bezpečné potlačit porušení tohoto pravidla, pokud vás nezajímá dopad na výkon konkrétních Enumerable volání metod.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Konfigurace kódu pro analýzu
Pomocí následující možnosti nakonfigurujte, ve kterých částech základu kódu se má toto pravidlo spouštět.
Vyloučit metody FirstOrDefault a LastOrDefault
Toto pravidlo můžete nakonfigurovat tak, aby vyloučilo Enumerable.FirstOrDefault metody a Enumerable.LastOrDefault metody z analýzy. Pokud jde o čitelnost, můžete zvážit vyloučení těchto metod, protože kód, který byste napsali, aby je nahradil, není snadno čitelný. Pokud chcete tyto metody vyloučit, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Související pravidla
- CA1827: Nepoužívejte Počet/LongCount, pokud lze použít libovolnou možnost
- CA1828: Nepoužívejte CountAsync/LongCountAsync, pokud je možné použít AnyAsync
- CA1829: Místo metody Enumerable.Count použijte vlastnost Length/Count.