CA2201: 예약된 예외 형식을 발생시키지 마십시오.
속성 | 값 |
---|---|
규칙 ID | CA2201 |
제목 | 예약된 예외 형식을 발생시키지 마세요. |
범주 | 사용 현황 |
수정 사항이 주요 변경인지 여부 | 주요 변경 |
.NET 9에서 기본적으로 사용 | 아니요 |
원인
메서드는 너무 일반적이거나 런타임에서 예약된 예외 형식을 발생합니다.
규칙 설명
다음 예외 형식은 너무 일반적이어서 사용자에게 충분한 정보를 제공할 수 없습니다.
다음 예외 형식은 예약되어 있으며 공용 언어 런타임에서만 throw되어야 합니다.
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
일반적인 예외를 throw하지 마세요.
라이브러리 또는 SystemException프레임워크에서 Exception 일반적인 예외 형식을 throw하는 경우 소비자가 처리 방법을 모르는 알 수 없는 예외를 포함하여 모든 예외를 catch하도록 강제합니다.
대신 프레임워크에 이미 있는 파생된 형식을 throw하거나 Exception에서 파생되는 고유한 형식을 만듭니다.
특정 예외 throw
다음 표에서는 속성의 접근자에 있는 값 매개 변수를 포함하여 다양한 형식의 잘못된 인수에 set
대해 throw할 예외를 보여줍니다.
잘못된 인수 | 예외 |
---|---|
null 참조 |
ArgumentNullException |
허용되는 값 범위(예: 컬렉션 또는 목록의 인덱스)를 벗어남 | ArgumentOutOfRangeException |
잘못된 enum 값 |
InvalidEnumArgumentException |
메서드의 매개 변수 사양을 충족하지 않는 형식(예: 의 ToString(String) 형식 문자열)을 포함합니다. |
FormatException |
그 외 잘못됨 | ArgumentException |
다음 표에서는 다양한 유형의 잘못된 작업에 대해 throw할 예외를 보여 줍니다.
잘못된 작업 | 예외 |
---|---|
개체의 현재 상태에 대한 작업이 잘못되었습니다. | InvalidOperationException |
작업은 삭제된 개체에 대해 수행됩니다. | ObjectDisposedException |
작업이 지원되지 않습니다(예: 읽기 위해 열린 스트림에서 재정 Stream.Write 의됨). |
NotSupportedException |
변환하면 오버플로가 발생합니다(예: 명시적 캐스트 연산자 오버로드). | OverflowException |
다른 모든 경우에는 Exception에서 파생되는 고유한 형식을 만들어 이를 throw하는 것이 좋습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 throw된 예외의 형식을 예약된 형식 중 하나가 아닌 특정 형식으로 변경합니다.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
관련 규칙
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET