Udostępnij za pośrednictwem


CA1860: Unikaj używania metody rozszerzenia "Enumerable.Any()"

Właściwości Wartość
Identyfikator reguły CA1860
Tytuł Unikaj używania metody rozszerzenia "Enumerable.Any()"
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

Enumerable.Any jest wywoływana na typie, który ma właściwość Length, Count lub IsEmpty.

Opis reguły

Aby określić, czy typ kolekcji zawiera jakiekolwiek elementy, bardziej wydajne i przejrzyste jest użycie właściwości Length, Count lub IsEmpty (jeśli to możliwe), niż wywołanie metody Enumerable.Any.

Any(), która jest metodą rozszerzenia, używa zapytania zintegrowanego z językiem (LINQ). Bardziej wydajne jest poleganie na własnych właściwościach kolekcji, co również wyjaśnia intencje.

Uwaga

Ta reguła jest podobna do CA1827: Nie używaj funkcji Count()/LongCount(), gdy można użyć funkcji Any(). Jednakże zasada ta ma zastosowanie do metody Linq , podczas gdy ta zasada sugeruje użycie właściwości.

Jak naprawić naruszenia

Zastąp wywołanie Any() wywołaniem właściwości Length, Count lub IsEmpty kolekcji.

Przykład

Poniższy fragment kodu przedstawia naruszenie CA1860:

bool HasElements(string[] strings)
{
    return strings.Any();
}
Function HasElements(strings As String()) As Boolean
    Return strings.Any()
End Function

Poniższy fragment kodu naprawia naruszenie:

bool HasElements(string[] strings)
{
    return strings.Length > 0;
}
Function HasElements(strings As String()) As Boolean
    Return strings.Length > 0
End Function

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli wydajność nie jest problemem.

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 CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1860.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.