다음을 통해 공유


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

속성
규칙 ID CA1836
제목 가능한 경우 Count 대신 IsEmpty 사용
범주 성능
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 제안 사항
적용 가능한 언어 C# 및 Visual Basic

원인

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

규칙 설명

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

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

CA1836에 대한 코드 수정 사항 - 개체에 항목이 포함되어 있는지 확인하려면 ‘Count’ 대신 ‘IsEmpty’ 사용

경고를 표시하지 않는 경우

성능 영향에 대해 신경 쓰지 않는다면 개수를 계산하기 위한 불필요한 항목 열거를 무시해도 됩니다.

경고 표시 안 함

단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.

#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

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

참고하기