다음을 통해 공유


CA2201: 예약된 예외 형식을 발생시키지 마십시오.

속성
규칙 ID CA2201
제목 예약된 예외 형식을 발생시키지 마세요.
범주 사용 현황
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경
.NET 10에서 기본적으로 사용하도록 설정 아니요
적용 가능한 언어 C# 및 Visual Basic

원인

메서드는 너무 일반적이거나 런타임에서 예약된 예외 유형을 발생시킵니다.

규칙 설명

다음 예외 형식은 너무 일반적이어서 사용자에게 충분한 정보를 제공할 수 없습니다.

다음 예외 형식은 예약되어 있으며 공용 언어 런타임에서만 throw되어야 합니다.

일반적인 예외를 throw하지 마세요.

라이브러리 또는 프레임워크에서 ExceptionSystemException와 같은 일반적인 예외 유형을 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();

경고를 표시하지 않는 경우

이 규칙에서 경고를 무시하지 마십시오.