다음을 통해 공유


CA1802: 가능하면 리터럴을 사용하십시오.

속성
규칙 ID CA1802
제목 가능하면 리터럴을 사용하세요.
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 9에서 기본적으로 사용 아니요

원인

필드가 선언된 staticreadonly(Visual Basic의 경우 SharedReadOnly)이고 컴파일 시간에 계산할 수 있는 값으로 초기화됩니다.

기본적으로 이 규칙은 외부에 표시되는 static, readonly 필드만 확인하지만 이는 구성 가능합니다.

규칙 설명

static readonly 필드의 값은 선언 형식에 대한 정적 생성자가 호출되면 런타임에 계산됩니다. static readonly 필드가 선언될 때 초기화되고 정적 생성자가 명시적으로 선언되지 않은 경우 컴파일러는 정적 생성자를 내보내 필드를 초기화합니다.

필드 값 const 은 컴파일 시간에 계산되고 메타데이터에 저장되므로 필드와 비교할 때 런타임 성능이 향상됩니다 static readonly .

대상 필드에 할당된 값은 컴파일 시간에 계산할 수 있으므로 이 값이 런타임 대신 컴파일 시간에 계산되도록 선언을 const 필드로 변경합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 staticreadonly 한정자를 const 한정자로 바꿉니다.

참고 항목

일부 시나리오에서는 const 한정자를 사용하지 않는 것이 좋습니다.

경고를 표시하지 않는 경우

성능이 중요하지 않은 경우 이 규칙의 경고를 표시하지 않거나 규칙을 사용하지 않도록 설정해도 됩니다.

경고

공용 또는 외부에 표시되는 멤버의 경우 static readonlyconst 변경하면 문제가 발생할 수 있습니다. const 값은 컴파일 시간에 종속 어셈블리에 포함되므로 라이브러리 값의 변경 내용이 전파되지 않아 오류가 발생할 수 있습니다. 나중에 멤버의 값이 변경될 수 있는 경우 이 규칙을 표시하지 않습니다.

참고 항목

const 사용하는 것은 private 멤버에게 안전하며, internal 통해 노출되거나 별도로 배포되지 않는 한 일반적으로 InternalsVisibleTo 멤버에게 안전합니다.

경고 표시 안 함

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

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

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

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

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

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주의 모든 규칙(성능)에 대해 이러한 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

api_surface 옵션을 설정하여 접근성에 따라 이 규칙을 실행할 코드베이스의 일부를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

참고 항목

XXXX CAXXXX 부분을 해당 규칙의 ID로 바꿉니다.

필수 한정자

필수 필드 한정자를 재정의하도록 이 규칙을 구성할 수 있습니다. 기본적으로 staticreadonly는 모두 분석되는 필드의 필수 한정자입니다. 다음 표에서 쉼표로 구분된 하나 이상의 한정자 값 목록으로 재정의할 수 있습니다.

옵션 값 요약
none 한정자 요구 사항이 없습니다.
static 또는 Shared ‘static’(Visual Basic의 경우 ‘Shared’)으로 선언되어야 합니다.
const ‘const’로 선언되어야 합니다.
readonly ‘readonly’로 선언되어야 합니다.

예를 들어 규칙이 정적 및 인스턴스 필드에 대해 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CA1802.required_modifiers = none

예시

다음 예제에서는 규칙을 위반하는 형식인 UseReadOnly 및 규칙을 충족하는 형식인 UseConstant를 보여 줍니다.

Imports System

Namespace ca1802

    ' This class violates the rule.
    Public Class UseReadOnly

        Shared ReadOnly x As Integer = 3
        Shared ReadOnly y As Double = x + 2.1
        Shared ReadOnly s As String = "readonly"

    End Class

    ' This class satisfies the rule.
    Public Class UseConstant

        Const x As Integer = 3
        Const y As Double = x + 2.1
        Const s As String = "const"

    End Class

End Namespace
// This class violates the rule.
public class UseReadOnly
{
    static readonly int x = 3;
    static readonly double y = x + 2.1;
    static readonly string s = "readonly";

    public void Print()
    {
        Console.WriteLine(s);
    }
}

// This class satisfies the rule.
public class UseConstant
{
    const int x = 3;
    const double y = x + 2.1;
    const string s = "const";
}