Share via


CA1700: 열거형 값의 이름을 'Reserved'로 지정하지 마십시오.

속성
규칙 ID CA1700
타이틀 열거형 값의 이름을 'Reserved'로 지정하지 마세요.
범주 이름 지정
수정 사항이 주요 변경인지 여부 주요 변경
.NET 8에서 기본적으로 사용 아니요

원인

열거형 멤버의 이름에는 “reserved”라는 단어가 포함됩니다.

규칙 설명

이 규칙에서는 "reserved"라는 단어가 포함된 이름을 갖는 열거형 멤버가 현재 사용되지는 않지만 이후 버전에서 이름이 바뀌거나 제거될 자리 표시자라고 가정합니다. 멤버의 이름을 바꾸거나 멤버를 제거하는 것은 주요 변경에 해당합니다. 이름에 “reserved”가 포함되어 있다고 해서 사용자가 멤버를 무시할 수 없고 사용자가 설명서를 읽거나 준수할 것이라 기대할 수도 없습니다. 또한 예약된 멤버는 개체 브라우저 및 스마트 통합 개발 환경에 표시되기 때문에 실제로 사용되는 멤버에 대해 혼동을 일으킬 수 있습니다.

예약된 멤버를 사용하는 대신 이후 버전의 열거형에 새 멤버를 추가합니다. 대부분의 경우 새 멤버를 추가하는 것은 해당 추가로 인해 원래 멤버의 값이 변경되지 않는 한 호환성이 손상되는 변경이 아닙니다.

흔한 사례는 아니지만 원래 멤버가 원래 값을 유지하는 경우에도 멤버를 추가하는 것은 호환성이 손상되는 변경입니다. 주로 전체 멤버 목록을 포함하고 기본 사례에서 예외를 throw하는 반환 값에 대해 switch(Visual Basic에서 Select) 문을 사용하는 호출자를 중단하지 않고 기존 코드 경로에서 새 멤버를 반환할 수 없습니다. 두 번째 문제는 클라이언트 코드가 System.Enum.IsDefined와 같은 리플렉션 메서드에서의 동작 변경을 처리하지 않을 수 있다는 것입니다. 따라서 새 멤버가 기존 메서드에서 반환되어야 하는 경우 또는 잘못된 리플렉션 사용으로 인해 알려진 애플리케이션 비호환성이 발생하는 경우 유일한 해결책은 다음과 같습니다.

  1. 원래 멤버 및 새 멤버를 포함하는 새 열거형을 추가합니다.

  2. 원래 열거형을 System.ObsoleteAttribute 특성으로 표시합니다.

    원래 열거형을 노출하는 외부 표시 형식 또는 멤버에 동일한 절차를 수행합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 멤버를 제거하거나 이름을 바꿉니다.

경고를 표시하지 않는 경우

현재 사용 중인 멤버나 이전에 제공된 라이브러리에 대해서는 이 규칙에서 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

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

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

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

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

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

분석할 코드 구성

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

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

특정 API 화면 포함

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오.

CA1712: 열거형 값에 형식 이름을 접두사로 사용하지 마십시오.

CA1028: 열거형 스토리지는 Int32여야 합니다.

CA1008: 열거형에는 0 값이 있어야 합니다.

CA1027: 열거형을 FlagsAttribute로 표시하십시오.