방프리

21.09.27 Chapter5. 예외처리 (Item 49) 본문

C#/Effective C#

21.09.27 Chapter5. 예외처리 (Item 49)

방프리 2021. 9. 27. 21:02

Item 49 : catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다.

 

예외가 발생한 이후 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에서 했던 정보가 살아있는 

상태에서 검증하도록 하는 것이 좋다.

 

 

Comments