CA1507: 문자열 대신 nameof
를 사용하세요
속성 | 값 |
---|---|
규칙 ID | CA1507 |
제목 | 문자열 대신 사용 nameof |
범주 | 유지 관리 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 제안 사항 |
원인
포함하는 메서드의 매개 변수 이름 또는 포함하는 형식의 속성 이름과 일치하는 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 사용을 선택합니다.
경고를 표시하지 않는 경우
코드의 유지 관리가 중요하지 않은 경우 이 규칙의 위반을 표시하지 않아도 됩니다.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#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
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
관련 규칙
참고 항목
.NET