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


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:

Проанализированные типы коллекций могут быть расширены в будущем, чтобы охватывать больше случаев.

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

Чтобы устранить нарушение, замените вызов метода 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(), если оно доступно.

Исправление кода для правила 1829: используйте свойство 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

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

См. также