[C# 문법] 예외 필터 사용방법
- C#/C# 문법
- 2021. 12. 28. 18:21
1. 예외 필터
- C# 6.0 부터 catch 절이 받아들일 예외 객체에 제약 사항을 명시해서 해당 조건을 만족하는 예외 객체에 대해서만 예외 처리 코드를 실행할 수 있도록
예외 필터(Exception Filter)
가 도입되었습니다. - 예외 필터는 catch 문 이후에 when 키워드를 이용하여 구성하게 되는데 catch 문에 지정한 예외 타입에 대해서만 필터가 수행됩니다. (when을 if라고 생각하면 됩니다.)
- 다음은 예외 필터를 이용한 예제 코드입니다.
using System;
namespace Chapter49
{
class Program
{
static void Main(string[] args)
{
string input = "-6";
try
{
int num = Int32.Parse(input);
if (num < 0 || num > 10)
{
throw new FilterableException()
{
ErrorNo = num
};
}
else
{
Console.WriteLine($"Output : {num}");
}
}
catch (FilterableException e) when (e.ErrorNo < 0)
{
Console.WriteLine("입력된 수가 0보다 작으면 안됩니다");
}
catch (FilterableException e) when (e.ErrorNo > 10)
{
Console.WriteLine("입력된 수가 10보다 크면 안됩니다");
}
finally
{
Console.WriteLine("프로그램 종료");
}
}
}
public class FilterableException : Exception
{
public int ErrorNo { get; set; }
}
}
입력된 수가 0보다 작으면 안됩니다
- 컴파일러는 스택 되감기(stack unwinding) 를 수행하기 이전에 예외 필터를 수행하도록 코드를 생성합니다.
- when 절에서는 예외에 대한 위치를 알고 있기 때문에 호출 스택이나 지역변수 등에 대한 모든 정보에 접근할 수 있습니다.
- 만약 예외 필터가 false를 반환하면 런타임은 콜 스택을 따라 올라가면서 앞서 발생한 예외의 타입에 부합하는 catch문을 계속 찾아 나갑니다.
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 벤치마크] IntroCategories 사용방법 (0) | 2021.12.29 |
---|---|
[C# 문법] 파일 경로에서 디렉토리 경로 가져오기 (0) | 2021.12.29 |
[C# 문법] 사용자 지정 예외 클래스 만들기 (0) | 2021.12.27 |
[C# 벤치마크] C# BenchMarkDotNet ParamsSource 사용법 (0) | 2021.12.17 |
[C# 문법] Reflection 이용하여 Class 속성, 값 출력하기 (0) | 2021.12.16 |
이 글을 공유하기