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 9 | Jako sugestia |
Przyczyna
Enumerable.Anyjest wywoływana w typie, który ma Length
właściwość , Count
lub IsEmpty
.
Opis reguły
Aby określić, czy typ kolekcji ma jakiekolwiek elementy, jest bardziej wydajny i jaśniejszy, aby użyć Length
właściwości , Count
lub 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 Linq Count()
, podczas gdy ta reguła Count
sugeruje użycie właściwości .
Jak naprawić naruszenia
Zastąp wywołanie any() wywołaniem właściwości , Count
lub 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.