Share via


CA1827: Any()를 사용할 수 있는 경우 Count()/LongCount()를 사용하지 마세요.

속성
규칙 ID CA1827
타이틀 Any()를 사용할 수 있는 경우 Count()/LongCount()를 사용하지 마세요.
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

Any() 메서드가 더 효율적인 경우 Count() 또는 LongCount()메서드가 사용되었습니다.

규칙 설명

이 규칙은 컬렉션에 요소가 하나 이상 있는 경우 검사 데 사용되는 Count()LongCount() LINQ 메서드 호출에 플래그를 지정합니다. 이러한 메서드는 전체 컬렉션을 열거하여 개수를 계산합니다. 컬렉션을 열거하지 않기 때문에 Any() 메서드와 동일한 검사 더 빠릅니다.

참고 항목

이 규칙은 CA1860과 유사 합니다. 'Enumerable.Any()' 확장 메서드를 사용하지 마세요. 그러나 이 규칙은 Linq Count()확장 메서드Count적용되는 반면, 이 규칙은 속성을 사용하도록 제안합니다.

위반 문제를 해결하는 방법

위반 문제를 해결하려면 Count 또는 LongCount 메서드 호출을 Any 메서드로 바꿉니다. 예를 들어 다음 두 코드 조각은 규칙의 위반과 위반을 해결하는 방법을 보여 줍니다.

using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Count() != 0 ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.LongCount() > 0 ? "Not empty" : "Empty";
}
using System.Collections.Generic;
using System.Linq;

class C
{
    public string M1(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";

    public string M2(IEnumerable<string> list)
        => list.Any() ? "Not empty" : "Empty";
}

Visual Studio에서는 이 규칙에 대한 코드 수정 사항을 사용할 수 있습니다. 이를 사용하려면 위반에 커서를 놓고 Ctrl+ 키를 누릅니다.(마침표). 옵션 목록이 표시되면 Any()를 사용할 수 있는 경우 Count() 또는 LongCount() 사용 안 함을 선택합니다.

Code fix for CA1827 - Do not use Count() or LongCount() when Any() can be used

경고를 표시하지 않는 경우

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

경고 표시 안 함

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

#pragma warning disable CA1827
// The code that's violating the rule is on this line.
#pragma warning restore CA1827

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1827.severity = none

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

참고 항목