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 powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Enumerable.Anyjest wywoływana w typie, który ma Lengthwłaściwość , Countlub IsEmpty.

Opis reguły

Aby określić, czy typ kolekcji ma jakiekolwiek elementy, jest bardziej wydajny i jaśniejszy, aby użyć Lengthwłaściwości , Countlub IsEmpty (jeśli to możliwe), niż wywołać metodę 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, a także objaśnienie intencji.

Uwaga

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

Jak naprawić naruszenia

Zastąp wywołanie any() wywołaniem właściwości , Countlub IsEmpty kolekcjiLength.

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.