Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1829 |
| Заголовок | Используйте свойство Length/Count вместо метода Enumerable.Count |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Метод 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, если можно использовать Any.
- CA1828: не используйте CountAsync/LongCountAsync при использовании AnyAsync