Share via


CA2245: 자체에 속성을 할당하지 마세요.

속성
규칙 ID CA2245
타이틀 속성을 자체에 할당하지 마세요.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

속성이 실수로 속성 자체에 할당받았습니다.

규칙 설명

필드, 로컬 또는 매개 변수 기호가 자신에게 할당된 경우에는 C# 컴파일러가 CS1717: 같은 변수에 할당했습니다. 다른 요소를 할당하시겠습니까? 경고를 생성합니다. 이러한 실수는 로컬, 매개 변수 또는 필드 기호의 이름이 범위에 있는 다른 기호와 비슷한 경우에 자주 발생합니다. 할당의 왼쪽 및 오른쪽에 다른 기호가 사용되지 않고 동일한 기호가 양쪽에서 사용되었습니다. 이로 인해 값을 자신에게 중복해서 할당하게 되고 대개 기능 버그가 있음을 의미합니다.

자신에게 속성을 할당하는 것은 거의 모든 실제 사례에서 발생하는 유사한 기능 버그이기도 합니다. 그러나 일부 극단적인 경우에는 속성 값을 가져옴으로써 부작용이 발생할 수 있으며 해당 속성의 새 값이 원래 값과 다를 수 있습니다. 그럴 때는 속성 자체 할당이 중복되지 않으므로 제거할 수 없습니다. 그 결과 컴파일러가 해당 경우에 대한 호환성이 손상되는 변경을 도입하지 않고도 속성 자체 할당에 대한 CS1717 경고를 생성하지 않습니다.

규칙 CA2245는 이러한 차이를 대상으로 합니다. 이러한 기능 버그를 수정하는 데 도움이 되는 속성 자체 할당에 대한 위반을 보고합니다. 속성 자체 할당이 필요한 소수의 비정상적인 상황에서는 적절한 근거 주석을 사용하여 소스에서 CA2245 위반을 억제할 수 있습니다.

위반 문제를 해결하는 방법

위반 문제를 해결하려면 왼쪽에 있는 다른 기호와 할당의 오른쪽을 사용합니다. 예를 들어 다음 코드 조각은 규칙의 위반 및 해결 방법을 보여 줍니다.

public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // CS1717: Accidentally assigned the parameter 'p' to itself.
        p = p;

        // CA2245: Accidentally assigned the property 'P' to itself.
        P = P;
    }
}
public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // No violation, now the parameter is assigned to the field.
        this.p = p;

        // No violation, now the parameter is assigned to the property.
        P = p;
    }
}

경고를 표시하지 않는 경우

속성 값을 가져오는 경우 부작용이 있을 수 있고 속성의 새 값이 원래 값과 다른 경우 이 규칙의 위반을 표시하지 않는 것이 안전합니다. 이 경우에는 속성 자체 할당이 중복되지 않습니다. 이를 예상 동작으로 문서화하려면 비표시 항목에 근거 주석을 추가해야 합니다.

경고 표시 안 함

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

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

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

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

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

참고 항목