Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1836 |
| Заголовок | предпочитайте IsEmpty вместо Count (при наличии) |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Для определения наличия каких-либо элементов в объекте путем сравнения значения с Count или Length использовалось свойство Count<TSource>(IEnumerable<TSource>) или 0 либо метод расширения 1, хотя объект имеет более эффективное свойство IsEmpty, которое можно использовать вместо них.
Описание правила
Это правило помечает вызовы свойств Count и Length или методов LINQ Count<TSource>(IEnumerable<TSource>) и LongCount<TSource>(IEnumerable<TSource>), когда они используются для определения наличия каких-либо элементов в объекте, хотя объект имеет более эффективное свойство IsEmpty.
Анализ этого правила изначально пересекался с аналогичными правилами CA1827, CA1828 и CA1829; анализаторы таких правил были объединены вместе с анализатором правила CA1836 для обеспечения наиболее точной диагностики в случае пересечения.
Устранение нарушений
Чтобы устранить нарушение, замените вызов метода Count<TSource>(IEnumerable<TSource>) или LongCount<TSource>(IEnumerable<TSource>) либо доступ к свойству Length или Count, если он используется в операции, которая определяет, пуст ли объект, доступом к свойству IsEmpty. В следующих двух фрагментах кода показано нарушение правила и способы его устранения:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
Совет
Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на нарушение и нажмите Ctrl+. (точка). В списке выберите Предпочитайте "IsEmpty" перед "Count", чтобы определить, содержит ли объект какие-либо элементы.
Когда лучше отключить предупреждения
Можно отключить проверку на нарушение этого правила, если вас не беспокоит влияние на производительность из-за ненужного перечисления элементов для подсчета.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1836
// The code that's violating the rule is on this line.
#pragma warning restore CA1836
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1836.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Связанные правила
- CA1827: не используйте Count/LongCount, если можно использовать Any.
- CA1828: не используйте CountAsync/LongCountAsync при использовании AnyAsync
- CA1829: используйте свойство Length/Count вместо метода Enumerable.Count