CA1826: Använd egenskapen i stället för Linq Enumerable-metoden
Property | Värde |
---|---|
Regel-ID | CA1826 |
Title | Använd egenskapen i stället för linq-uppräkningsbar metod |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Enumerable LINQ-metoden användes på en typ som stöder en motsvarande, effektivare egenskap.
Regelbeskrivning
Den här regeln flaggar Enumerable LINQ-metoden anropar samlingar av typer som har motsvarande men effektivare egenskaper för att hämta samma data.
Den här regeln analyserar samlingstyper som implementerar IReadOnlyList<T> men inte IList<T>.
Den här regeln flaggar anrop till följande metoder för dessa samlingstyper:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
De analyserade samlingstyperna och metoderna kan utökas i framtiden för att omfatta fler fall.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse ersätter du metodanropet Enumerable med egenskapsåtkomst. Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:
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);
}
}
Dricks
En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på överträdelsen och trycker på Ctrl+. (punkt). Välj Använd indexerare i listan över alternativ som visas.
När du ska ignorera varningar
Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om prestandapåverkan från specifika Enumerable metodanrop.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1826.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Konfigurera kod för analys
Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.
Exkludera FirstOrDefault- och LastOrDefault-metoder
Du kan konfigurera den här regeln för att undanta Enumerable.FirstOrDefault metoderna och Enumerable.LastOrDefault från analysen. Du kan överväga att exkludera dessa metoder om läsbarhet är ett problem, eftersom koden du skriver för att ersätta dem inte är lättläst. Om du vill undanta dessa metoder lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Relaterade regler
- CA1827: Använd inte Count/LongCount när alla kan användas
- CA1828: Använd inte CountAsync/LongCountAsync när AnyAsync kan användas
- CA1829: Använd egenskapen Length/Count i stället för metoden Enumerable.Count