Share via


CA1507: 문자열 대신 nameof를 사용하세요

속성
규칙 ID CA1507
타이틀 문자열 대신 사용 nameof
범주 유지 관리
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

포함하는 메서드의 매개 변수 이름 또는 포함하는 형식의 속성 이름과 일치하는 string 리터럴 또는 상수가 메서드의 인수로 사용됩니다.

규칙 설명

규칙 CA1507은 메서드 또는 생성자에 대한 인수로서의 string 리터럴 사용에 플래그를 지정합니다. 여기서 nameof(Visual Basic의 경우 NameOf) 식은 유지 관리를 추가합니다. 규칙은 다음 조건이 모두 충족되면 발생합니다.

  • 인수가 string 리터럴 또는 상수입니다.

  • 인수는 호출되는 메서드 또는 생성자의 string 형식 매개 변수에 해당합니다. 즉, 호출 사이트에 관련된 변환이 없습니다.

  • 다음 중 하나

    • 매개 변수의 선언된 이름은 paramName이고 string 리터럴의 상수 값은 메서드 또는 생성자가 호출되는 메서드, 람다, 로컬 함수의 매개 변수 이름과 일치합니다.

    • 매개 변수의 선언된 이름은 propertyName이고 string 리터럴의 상수 값은 메서드 또는 생성자가 호출되는 형식의 속성 이름과 일치합니다.

나중에 매개 변수의 이름을 바꿀 수 있지만 실수로 string 리터럴의 이름을 바꾸지 않은 경우 규칙 CA1507은 코드 유지 관리를 향상합니다. nameof를 사용하면 리팩터링 작업을 통해 매개 변수의 이름을 바꿀 때 기호의 이름이 바뀝니다. 또한 컴파일러는 매개 변수 이름에서 맞춤법 오류를 catch합니다.

위반 문제를 해결하는 방법

위반 문제를 해결하려면 string 리터럴을 nameof(Visual Basic의 경우 NameOf) 식으로 바꿉니다. 예를 들어 다음 두 코드 조각은 규칙의 위반과 위반을 해결하는 방법을 보여 줍니다.

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Visual Studio에서는 이 규칙에 대한 코드 수정 사항을 사용할 수 있습니다. 이를 사용하려면 커서를 리터럴에 string 놓고 Ctrl+ 키를 누릅니다( 마침표). 옵션 목록이 표시되면 기호 이름을 표시하기 위해 nameof 사용을 선택합니다.

Code fix for CA1507 - use nameof to express symbol names

경고를 표시하지 않는 경우

코드의 유지 관리가 중요하지 않은 경우 이 규칙의 위반을 표시하지 않아도 됩니다.

경고 표시 안 함

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

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

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

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

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

참고 항목