Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1826 |
| Tytuł | Użyj właściwości zamiast metody Linq Enumerable |
| Kategoria | Wydajność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
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 oznacza wywołania metody LINQ dla kolekcji typów, które mają równoważne, ale bardziej wydajne właściwości służące do pozyskiwania tych samych danych.
Ta reguła analizuje typy kolekcji, które implementują IReadOnlyList<T> , ale nie IList<T>.
Ta reguła oznacza wywołania następujących metod na tych 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, wywołanie metody Enumerable zastąp 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);
}
}
Wskazówka
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 określonych wywołań metod Enumerable na wydajność.
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 kodu mają być objęte tą regułą.
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 Count/LongCount, gdy można użyć Any
- 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