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
коллекции или Count
IsEmpty
свойству.
Пример
В следующем фрагменте кода показано нарушение 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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.