| 속성 | 값 |
|---|---|
| 규칙 ID | CA1836 |
| 제목 | 가능한 경우 Count 대신 IsEmpty 사용 |
| 범주 | 성능 |
| 수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 | 주요 변경 아님 |
| .NET 10에서 기본적으로 사용하도록 설정 | 제안 사항 |
| 적용 가능한 언어 | C# 및 Visual Basic |
원인
Count 또는 Length 속성이나 Count<TSource>(IEnumerable<TSource>) 확장 메서드가 값을 0 또는 1과 비교하여 개체에 항목이 포함되어 있는지와 개체에 대신 사용할 수 있는 더욱 효율적인 IsEmpty 속성이 있는지 확인하는 데 사용되었습니다.
규칙 설명
이 규칙은 개체에 항목이 포함되어 있고 개체에 더욱 효율적인 Count 속성이 있는지를 확인하는 데 사용되는 경우 Length 및 Count<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’를 사용하세요.를 선택합니다.
경고를 표시하지 않는 경우
성능 영향에 대해 신경 쓰지 않는다면 개수를 계산하기 위한 불필요한 항목 열거를 무시해도 됩니다.
경고 표시 안 함
단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.
#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