Share via


CA1836: 사용 가능한 경우 개수보다 IsEmpty를 선호합니다.

속성
규칙 ID CA1836
타이틀 가능한 경우 Count 대신 IsEmpty 사용
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

Count 또는 Length 속성이나 Count<TSource>(IEnumerable<TSource>) 확장 메서드가 값을 0 또는 1과 비교하여 개체에 항목이 포함되어 있는지와 개체에 대신 사용할 수 있는 더욱 효율적인 IsEmpty 속성이 있는지 확인하는 데 사용되었습니다.

규칙 설명

이 규칙은 개체에 항목이 포함되어 있고 개체에 더욱 효율적인 IsEmpty 속성이 있는지를 확인하는 데 사용되는 경우 CountLength 속성 또는 Count<TSource>(IEnumerable<TSource>)LongCount<TSource>(IEnumerable<TSource>) LINQ 메서드 호출에 플래그를 지정합니다.

이 규칙의 분석은 원래 유사한 규칙 CA1827, CA1828, CA1829와 겹칩니다. 이러한 규칙의 분석기는 겹치는 경우 가장 적합한 진단을 보고하는 CA1836에 대한 분석기와 병합되었습니다.

위반 문제를 해결하는 방법

위반 문제를 해결하려면 IsEmpty 속성 액세스를 사용하여 개체가 비어 있는지 확인하는 작업에서 사용되는 경우 Count<TSource>(IEnumerable<TSource>) 또는 LongCount<TSource>(IEnumerable<TSource>) 메서드 호출이나 Length 또는 Count 속성 액세스를 바꿉니다. 예를 들어 다음 두 코드 조각은 규칙의 위반과 위반을 해결하는 방법을 보여 줍니다.

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+ 키를 누릅니다.(마침표). 옵션 목록이 표시되면 개체에 항목이 포함되어 있는지 확인하려면 ‘Count’대신 ‘IsEmpty’를 사용하세요.를 선택합니다.

Code fix for CA1836 - Prefer 'IsEmpty' over 'Count' to determine whether the object contains or not any items

경고를 표시하지 않는 경우

개수를 계산하기 위한 불필요한 항목 열거가 성능에 미치는 영향을 고려하지 않아도 되는 경우 이 규칙의 위반을 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#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

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

참고 항목