Share via


CA1861: 상수 배열을 인수로 사용하지 않습니다.

속성
규칙 ID CA1861
타이틀 상수 배열을 인수로 사용하지 않도록 방지
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

리터럴 값의 상수 배열은 일반 호출 또는 확장 메서드 호출을 통해 메서드에 전달됩니다.

규칙 설명

인수로 전달된 상수 배열은 반복적으로 호출될 때 다시 사용되지 않으며, 이는 매번 새 배열이 생성됨을 의미합니다. 전달된 배열이 호출된 메서드 내에서 변경되지 않은 경우 성능을 향상시키기 위해 static readonly 필드에 추출하는 것이 좋습니다.

참고 항목

호출된 메서드가 전달된 배열을 변경하거나 메서드가 배열을 변경할지 확실하지 않은 경우 배열 static readonly 을 필드에 추출하지 마세요. 이렇게 하면 호환성이 손상되는 변경이 될 수 있습니다. 이 경우 경고를 대신 표시하지 않는 것이 좋습니다.

위반 문제를 해결하는 방법

전달된 배열이 static readonly 호출된 메서드 내에서 변경되지 않은 경우 필드에 상수 배열을 추출합니다.

다음 예제에서는 규칙 위반을 보여줍니다.

// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})

다음 예제에서는 필드에 인수를 추출 하 여이 규칙의 위반을 해결 하는 static readonly 방법을 보여 집니다.

private static readonly string[] array = new[] { "Hello" , "world!" };

private string GetMessage()
{
    return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}

Private Function GetMessage() As String
    Return String.Join(" ", array)
End Function

이제 배열 값이 런타임이 아닌 컴파일 시간에 확인되어 코드 성능이 향상됩니다.

경고를 표시하지 않는 경우

다음과 같은 경우 이 규칙 위반을 표시하지 않습니다.

  • 호출은 한 번만 실행됩니다.
  • 호출된 메서드 내에서 배열이 변경될 수 있거나 변경될지 확실하지 않습니다.
  • 각 호출에 대해 상수 배열을 만들 때 성능에 미치는 영향은 걱정하지 않습니다.

경고 표시 안 함

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

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

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

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

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