CA1826: Użyj właściwości zamiast metody Linq Enumerable
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1826 |
Tytuł | Użyj właściwości zamiast metody Linq Enumerable |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Metoda Enumerable LINQ została użyta dla typu, który obsługuje równoważną, bardziej wydajną właściwość.
Opis reguły
Ta reguła flaguje Enumerable wywołania metody LINQ dla kolekcji typów, które mają równoważne, ale bardziej wydajne właściwości w celu pobrania tych samych danych.
Ta reguła analizuje typy kolekcji, które implementują IReadOnlyList<T> , ale nie IList<T>.
Ta reguła flaguje wywołania następujących metod w następujących typach kolekcji:
- System.Linq.Enumerable.Count
- System.Linq.Enumerable.First
- System.Linq.Enumerable.FirstOrDefault
- System.Linq.Enumerable.Last
- System.Linq.Enumerable.LastOrDefault
Przeanalizowane typy i metody kolekcji mogą zostać rozszerzone w przyszłości w celu pokrycia większej liczby przypadków.
Jak naprawić naruszenia
Aby naprawić naruszenie, zastąp Enumerable wywołanie metody dostępem do właściwości. Na przykład następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:
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);
}
}
Napiwek
Poprawka kodu jest dostępna dla tej reguły w programie Visual Studio. Aby go użyć, umieść kursor na naruszeniu i naciśnij Ctrl+. (kropka). Wybierz pozycję Użyj indeksatora z listy przedstawionych opcji.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie obawiasz się wpływu na wydajność określonych Enumerable wywołań metod.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1826
// The code that's violating the rule is on this line.
#pragma warning restore CA1826
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1826.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Konfigurowanie kodu do analizowania
Użyj następującej opcji, aby skonfigurować, które części bazy kodu mają być uruchamiane w tej regule.
Wykluczanie metod FirstOrDefault i LastOrDefault
Tę regułę można skonfigurować, aby wykluczyć Enumerable.FirstOrDefault metody i Enumerable.LastOrDefault z analizy. Możesz rozważyć wykluczenie tych metod, jeśli czytelność jest istotna, ponieważ kod, który chcesz zastąpić, nie jest łatwo czytelny. Aby wykluczyć te metody, dodaj następującą parę klucz-wartość do pliku editorconfig w projekcie:
dotnet_code_quality.CA1826.exclude_ordefault_methods = true
Powiązane reguły
- CA1827: Nie używaj funkcji Count/LongCount, gdy można użyć dowolnego
- CA1828: Nie używaj funkcji CountAsync/LongCountAsync, gdy można użyć narzędzia AnyAsync
- CA1829: Użyj właściwości Length/Count zamiast metody Enumerable.Count