CA1829: используйте свойство Length/Count вместо метода Enumerable.Count
Свойство | Значение |
---|---|
Идентификатор правила | CA1829 |
Заголовок | Используйте свойство Length/Count вместо метода Enumerable.Count |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Метод LINQ Count использовался для типа, поддерживающего эквивалентное и более эффективное свойство Length
или Count
.
Описание правила
Это правило помечает вызовы метода LINQ Count для коллекций типов, которые имеют эквивалентные, но более эффективные свойства Length
или Count
для получения одних и тех же данных. Свойство Length
или Count
не перечисляет коллекцию, поэтому является более эффективным.
Это правило помечает вызовы Count для следующих типов коллекций со свойством Length
:
Это правило помечает вызовы Count для следующих типов коллекций со свойством Count
:
- System.Collections.ICollection
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IReadOnlyCollection<T>
Проанализированные типы коллекций могут быть расширены в будущем, чтобы охватывать больше случаев.
Устранение нарушений
Чтобы устранить нарушение, замените вызов метода Count доступом к свойству Length
или Count
. В следующих двух фрагментах кода показано нарушение правила и способы его устранения:
using System.Collections.Generic;
using System.Linq;
class C
{
public int GetCount(int[] array)
=> array.Count();
public int GetCount(ICollection<int> collection)
=> collection.Count();
}
using System.Collections.Generic;
class C
{
public int GetCount(int[] array)
=> array.Length;
public int GetCount(ICollection<int> collection)
=> collection.Count;
}
Совет
Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на нарушение и нажмите клавиши CTRL+ (период). В списке выберите Используйте свойство Length/Count вместо Count(), если оно доступно.
Когда лучше отключить предупреждения
Вывод предупреждений для этого правила можно отключить, если вас не беспокоит влияние ненужного перечисления коллекции для подсчета количества.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1829.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Связанные правила
- CA1826: используйте свойство вместо метода Linq Enumerable
- CA1827: не используйте Count/LongCount, если можно использовать Любой.
- CA1828: не используйте CountAsync/LongCountAsync при использовании AnyAsync