Поделиться через


CA1860: избегайте использования метода расширения "Enumerable.Any()"

Свойство Значение
Идентификатор правила CA1860
Заголовок Избегайте использования метода расширения Enumerable.Any()<
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Enumerable.Anyвызывается для типа, имеющего Lengthсвойство , или IsEmpty свойство. Count

Описание правила

Чтобы определить, имеет ли тип коллекции какие-либо элементы, эффективнее и понятнее использовать Lengthсвойства , Countили IsEmpty (если это возможно), чем вызывать Enumerable.Any метод.

Any(), который является методом расширения, использует языковой интегрированный запрос (LINQ). Более эффективно полагаться на собственные свойства коллекции, а также уточнить намерение.

Примечание.

Это правило похоже на CA1827: не используйте Count()/LongCount() при использовании Any(). Однако это правило применяется к методу Linq Count() , в то время как это правило предполагает использование Count свойства.

Устранение нарушений

Замените вызов Any() вызовом Lengthколлекции или CountIsEmpty свойству.

Пример

В следующем фрагменте кода показано нарушение CA1860:

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

Следующий фрагмент кода исправляет нарушение.

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

Когда лучше отключить предупреждения

Это предупреждение безопасно подавлять, если производительность не является проблемой.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.