C# 팁: WHEN 절을 사용한 예외 처리
when
키워드를 사용하여 예외를 처리하기 전에 조건을 지정할 수 있습니다.이것을 고려하십시오-매우 쓸모가 없습니다. 인정해야합니다-예외 유형:
public class RandomException : System.Exception
{
public int Value { get; }
public RandomException()
{
Value = (new Random()).Next();
}
}
이 예외 유형에는 예외가 발생할 때 임의의 값으로 채워지는
Value
속성이 포함되어 있습니다.Value
속성이 홀수인지 짝수인지에 따라 다른 메시지를 인쇄하려면 어떻게 해야 합니까?다음과 같이 할 수 있습니다.
try
{
throw new RandomException();
}
catch (RandomException re)
{
if(re.Value % 2 == 0)
Console.WriteLine("Exception with even value");
else
Console.WriteLine("Exception with odd value");
}
그러나
catch
블록을 가능한 한 단순하게 유지해야 합니다.여기서
when
키워드가 유용합니다.CSharp when 절
이를 사용하여 두 개의 별개
catch
블록을 생성할 수 있으며 각 블록은 가능한 가장 깔끔한 방식으로 케이스를 처리합니다.try
{
throw new RandomException();
}
catch (RandomException re) when (re.Value % 2 == 0)
{
Console.WriteLine("Exception with even value");
}
catch (RandomException re)
{
Console.WriteLine("Exception with odd value");
}
catch되는 예외의 현재 인스턴스를 참조할 수도 있는 조건과 함께
when
키워드를 사용해야 합니다. 실제로 조건은 Value
인스턴스의 RandomException
속성을 참조합니다.실제 사용법: HTTP 응답 오류
좋아요, 무작위 예외가 있는 그 예는 약간... 쓸모가 없나요?
실제 예를 살펴보겠습니다. HTTP 호출이 실패한 경우 다른 HTTP 상태 코드를 처리합니다.
다음 스니펫에서는 지정된 상태 코드(필자의 경우 506)를 반환하는 엔드포인트를 호출합니다.
try
{
var endpoint = "https://mock.codes/506";
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(endpoint);
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException ex) when (ex.StatusCode == (HttpStatusCode)506)
{
Console.WriteLine("Handle 506: Variant also negotiates");
}
catch (HttpRequestException ex)
{
Console.WriteLine("Handle another status code");
}
응답이 성공하지 못한 경우
response.EnsureSuccessStatusCode()
는 HttpRequestException
유형의 예외를 발생시킵니다. 던져진 예외에는 catch
를 사용하여 올바른 when (ex.StatusCode == (HttpStatusCode)506)
블록으로 예외 처리를 라우팅하는 데 사용할 수 있는 반환된 상태 코드에 대한 정보가 포함되어 있습니다.꽤 흥미롭죠? 😉
더 읽어보시려면 the official documentation으로 가세요. 많지는 않지만요.
즐거운 코딩하세요!
🐧
Reference
이 문제에 관하여(C# 팁: WHEN 절을 사용한 예외 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bellons91/c-tip-exception-handling-with-when-clause-38ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)