CA1836: 사용 가능한 경우 개수보다 IsEmpty를 선호합니다.
속성 | 값 |
---|---|
규칙 ID | CA1836 |
제목 | 가능한 경우 Count 대신 IsEmpty 사용 |
범주 | 성능 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 제안 사항 |
원인
Count
또는 Length
속성이나 Count<TSource>(IEnumerable<TSource>) 확장 메서드가 값을 0
또는 1
과 비교하여 개체에 항목이 포함되어 있는지와 개체에 대신 사용할 수 있는 더욱 효율적인 IsEmpty
속성이 있는지 확인하는 데 사용되었습니다.
규칙 설명
이 규칙은 개체에 항목이 포함되어 있고 개체에 더욱 효율적인 IsEmpty
속성이 있는지를 확인하는 데 사용되는 경우 Count
및 Length
속성 또는 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’를 사용하세요.를 선택합니다.
경고를 표시하지 않는 경우
개수를 계산하기 위한 불필요한 항목 열거가 성능에 미치는 영향을 고려하지 않아도 되는 경우 이 규칙의 위반을 표시하지 않아도 됩니다.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#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: Any를 사용할 수 있는 경우 Count/LongCount를 사용하지 마세요.
- CA1828: AnyAsync를 사용할 수 있는 경우 CountAsync/LongCountAsync를 사용하지 마세요.
- CA1829: Enumerable.Count 메서드 대신 Length/Count 속성을 사용합니다.
참고 항목
.NET