| 속성 | 값 |
|---|---|
| 규칙 ID | CA2201 |
| 제목 | 예약된 예외 형식을 발생시키지 마세요. |
| 범주 | 사용 현황 |
| 수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 | 주요 변경 |
| .NET 10에서 기본적으로 사용하도록 설정 | 아니요 |
| 적용 가능한 언어 | C# 및 Visual Basic |
원인
메서드는 너무 일반적이거나 런타임에서 예약된 예외 유형을 발생시킵니다.
규칙 설명
다음 예외 형식은 너무 일반적이어서 사용자에게 충분한 정보를 제공할 수 없습니다.
다음 예외 형식은 예약되어 있으며 공용 언어 런타임에서만 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하지 마세요.
라이브러리 또는 프레임워크에서 Exception나 SystemException와 같은 일반적인 예외 유형을 throw하는 경우, 소비자가 모든 예외를 catch하도록 강제하여, 심지어 처리 방법을 모르는 알 수 없는 예외까지 포함됩니다.
대신 프레임워크에 이미 있는 파생된 형식을 throw하거나 Exception에서 파생되는 고유한 형식을 만듭니다.
특정 예외를 던집니다
다음 표에서는 set 속성의 접근자에 있는 값 매개 변수를 포함하여 다양한 형식의 잘못된 인수에 대해 던져야 할 예외를 보여줍니다.
| 잘못된 인수 | 예외 |
|---|---|
null 참조 |
ArgumentNullException |
| 허용되는 값 범위(예: 컬렉션 또는 목록의 인덱스)를 벗어남 | ArgumentOutOfRangeException |
잘못된 enum 값 |
InvalidEnumArgumentException |
메서드의 매개 변수 사양을 충족하지 않는 형식(예: 의 ToString(String)형식 문자열)을 포함합니다. |
FormatException |
| 그 외의 경우 유효하지 않음 | ArgumentException |
다음 표는 다양한 유형의 잘못된 작업에 대해 던져야 할 예외를 보여 줍니다.
| 잘못된 작업 | 예외 |
|---|---|
| 개체의 현재 상태에 대해 작업이 유효하지 않습니다. | InvalidOperationException |
| 작업은 삭제된 개체에 대해 수행됩니다. | ObjectDisposedException |
작업이 지원되지 않습니다(예: 읽기 전용으로 열린 스트림에서 재정의된 Stream.Write와 같이). |
NotSupportedException |
| 변환하면 오버플로가 발생합니다(예: 명시적 캐스트 연산자 오버로드). | OverflowException |
다른 모든 경우에는 Exception에서 파생되는 사용자 정의 형식을 만들어 이를 throw하는 것이 좋습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 발생한 예외의 유형을 예약된 유형이 아닌 특정 유형으로 변경합니다.
Example
// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...
// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...
// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }
// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();
경고를 표시하지 않는 경우
이 규칙에서 경고를 무시하지 마십시오.
관련 규칙
.NET