본문 바로가기
C#/Effective C#

[Effective C#] Item 49 catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다.

by 코모's 2023. 6. 12.
반응형

예외가 발생한 이후 catch 구문에서 어떠한 조건을 넣으려고 할 때 되도록  if 구문보다 아예 catch에서 when 키워드를 통해 조건을 거는 것이 좋다.

 

var retryCount = 0;
var dataString = default(String);

while (dataString == null)
{
    try
    {
        dataString = MakeWebRequest();
    }
    catch (TimeoutException e) when (retryCount++ < 3)
    {
        WriteLine("Operation timed out. Trying again");
        Task.Delay(1000 * retryCount);
    }
}

만약 catch 문에서 조건을 걸었을 경우, try  구문에서 있었던 정보들이 사라지거나 클로저 변수 정보가 사라진다.

다만 예외 필터를 사용하게 되면 그 정보는 그대로 살아 있는 채로 검사가 가능한다.

그러므로 catch 구문에서 어떠한 검증이 필요하다면 되도록 예외 필터를 사용하여 try에서 했던 정보가 살아 있는 상태에서 검증하도록 하는 것이 좋다.

반응형