CA1826: Eigenschap gebruiken in plaats van Linq Enumerable-methode
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1826 |
Titel | Eigenschap gebruiken in plaats van Linq Enumerable-methode |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
De Enumerable LINQ-methode is gebruikt voor een type dat een equivalente, efficiëntere eigenschap ondersteunt.
Beschrijving van regel
Met deze regel wordt de Enumerable LINQ-methode aangeroepen voor verzamelingen typen met gelijkwaardige maar efficiëntere eigenschappen om dezelfde gegevens op te halen.
Met deze regel worden verzamelingstypen geanalyseerd die wel maar niet IList<T>worden geïmplementeerdIReadOnlyList<T>.
Met deze regel worden de volgende methoden voor deze verzamelingstypen aangeroepen:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
De geanalyseerde verzamelingstypen en -methoden kunnen in de toekomst worden uitgebreid om meer gevallen te behandelen.
Schendingen oplossen
Als u een schending wilt oplossen, vervangt u de methode-aanroep Enumerable door eigenschapstoegang. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:
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
Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Als u deze wilt gebruiken, plaatst u de cursor op de schending en drukt u op Ctrl+. (punt). Kies Indexeerfunctie gebruiken in de lijst met opties die worden weergegeven.
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 specifieke Enumerable methode-aanroepen.
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 CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
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.CA1826.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Code configureren om te analyseren
Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.
FirstOrDefault- en LastOrDefault-methoden uitsluiten
U kunt deze regel configureren om de Enumerable.FirstOrDefault en Enumerable.LastOrDefault methoden uit te sluiten van analyse. U kunt overwegen deze methoden uit te sluiten als de leesbaarheid een probleem is, omdat de code die u schrijft om ze te vervangen, niet gemakkelijk leesbaar is. Als u deze methoden wilt uitsluiten, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Gerelateerde regels
- CA1827: Gebruik count/LongCount niet wanneer any kan worden gebruikt
- CA1828: Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt
- CA1829: de eigenschap Length/Count gebruiken in plaats van de methode Enumerable.Count