Exception 클래스 없이 사용자 지정 예외를 처리하는 방법이 있습니까?
C#에 방법이 없을까요?).NET)에서 파생된 자신의 예외 클래스를 정의하기 위해 코드를 모두 작성하지 않고 사용자 지정 예외를 던집니다.Exception
?
예를 들어 간단히 쓸 수 있는 Oracle PL/SQL과 유사한 것을 생각하고 있습니다.
raise_application_error(-20001, 'An arbitary error message');
아무데서나
throw new Exception("A custom message for an application specific exception");
부족해요?
관련이 있는 경우 더 구체적인 예외를 적용할 수도 있습니다.예를들면,
throw new AuthenticationException("Message here");
아니면
throw new FileNotFoundException("I couldn't find your file!");
될 수 있습니다.
주의할 것은 아마도 당신이 하지 말아야 한다는 것입니다. throw new ApplicationException()
, MSDN 단위로
예외를 사용자 지정하지 않는 것의 큰 단점은 발신자가 일반적인 예외인지, 아니면 예외에 대한 특별한 검사를 하지 않으면 코드에 특정한 예외인지 알 수 없다는 것입니다.메시지 속성.다음과 같이 간단한 작업을 수행할 수 있습니다.
public class MyException : Exception
{
MyException(int severity, string message) : base(message)
{
// do whatever you want with severity
}
}
그것을 피하기 위해서 입니다.
업데이트: Visual Studio 2015는 이제 Exception 확장 클래스의 일부 자동 구현을 제공합니다. - 커서가 있는 상태에서 Quick Actions and Refactoring 메뉴를 열면: Exception
, 그냥 "모든 구성자 생성"에게 말하라고 하세요.
그Exception
클래스는 아닙니다.abstract
, 에 정의된 대부분의 예외와 같습니다.NET, Take a.string message
생성자 오버로드 중 하나에서 - 따라서 기존 예외 유형을 사용할 수 있지만 사용자 지정된 메시지를 사용할 수 있습니다.
throw new Exception("Something has gone haywire!");
throw new ObjectDisposedException("He's Dead, Jim");
throw new InvalidCastException(
$"Damnit Jim I'm a {a.GetType().Name}, not a {b.GetType().Name}!");
이렇게 하면 기존에 알려진 예외 유형을 사용하기 때문에 제3자가 라이브러리를 더 쉽게 확장할 필요가 없기 때문입니다.MyArbitraryException
인에catch
진술들.
단답 - 아니오.
사용자 지정 예외 상속을 시행하는 데는 상당한 이유가 있습니다. 사람들이 이를 처리할 수 있어야 합니다.유형이 없이 사용자 지정 예외를 적용할 수 있다면 사용자는 해당 예외 유형을 잡을 수 없을 것입니다.
사용자 지정 예외를 작성하지 않으려면 기존 예외 유형을 사용합니다.
c#에서 사용자 지정 예외를 만드는 쉬운 방법은 일반 클래스를 사용하는 것입니다.이렇게 하면 예외를 많이 만들어야 하는 경우(즉, 단위 테스트에서 예외를 구별해야 하는 경우) 코드 라인이 크게 줄어듭니다.
먼저 간단한 클래스를 만듭니다.CustomException<T>
:
public class CustomException<T> : Exception where T : Exception
{
public CustomException() { }
public CustomException(string message) : base(message){ }
public CustomException(string message, Exception innerException) : base(message, innerException){ }
public CustomException(SerializationInfo info, StreamingContext context) : base(info, context){ }
}
원하는 만큼(또는 필요한) 생성자 및 메서드를 재정의할 수 있습니다.새 Exception 유형을 만들려면 새 One-liner 클래스를 추가하기만 하면 됩니다.
public class MyCustomException : Exception { }
public class SomeOtherException : Exception { }
사용자 지정 예외를 높이려면 다음을 사용합니다.
throw new CustomException<MyCustomException>("your error description");
이를 통해 예외 코드는 단순하게 유지되며 다음과 같은 예외를 구별할 수 있습니다.
try
{
// ...
}
catch(CustomException<MyCustomException> ex)
{
// handle your custom exception ...
}
catch(CustomException<SomeOtherException> ex)
{
// handle your other exception ...
}
에서 사용할 수 있는 예외 중 하나만 던져도 됩니다.NET:
throw new System.ArgumentException("Parameter cannot be null", "original");
또는 더 일반적인 경우:
throw new ApplicationException("File storage capacity exceeded.");
언급URL : https://stackoverflow.com/questions/29994402/is-there-a-way-to-throw-custom-exception-without-exception-class
'code' 카테고리의 다른 글
MySQL 업데이트/직렬 데이터 손상 없이 교체 (0) | 2023.10.25 |
---|---|
WebGL/Canvas에 대한 AngularJS (0) | 2023.10.25 |
wp_insert_post(사용자 정의 분류법 포함) (0) | 2023.10.25 |
부트스트랩 모드로 자동 완성 문제 발생 (0) | 2023.10.25 |
정적 라이브러리에서 iOS 링커 오류가 발생하는 이유는 무엇입니까? (0) | 2023.10.25 |