Program Club

"던지기"는 무엇입니까?

proclub 2020. 11. 14. 11:14
반응형

"던지기"는 무엇입니까? 그 자체로?


중복 가능성 :
throw 및 throw new Exception ()의 차이점

그냥 갖는 요점은 무엇입니까

catch (Exception)
{
    throw;
}

이것은 무엇을합니까?


그 자체로 throw키워드는 catch명령문에서 포착 한 예외를 다시 발생시킵니다 . 이것은 기본적인 예외 처리 (아마도 트랜잭션 롤백과 같은 보상 조치)를 수행 한 다음 호출 메서드에 예외를 다시 발생시키려는 경우에 유용합니다.

이 메서드는 변수에서 예외를 포착하고 해당 인스턴스를 던지는 것보다 한 가지 중요한 이점이 있습니다. 원래 호출 스택을 유지합니다. (Exception ex)를 잡은 다음 ex를 던지면 호출 스택이 해당 throw 문에서만 시작되고 원래 오류의 메서드 / 줄이 손실됩니다.


때때로 다음과 같이 할 수 있습니다.

try
{
    // do some stuff that could cause SomeCustomException to happen, as 
    // well as other exceptions
}
catch (SomeCustomException)
{
    // this is here so we don't double wrap the exception, since
    // we know the exception is already SomeCustomException
    throw;
}
catch (Exception e)
{
    // we got some other exception, but we want all exceptions
    // thrown from this method to be SomeCustomException, so we wrap
    // it
    throw new SomeCustomException("An error occurred saving the widget", e);
}

내가 생각할 수있는 유일한 이유는 디버깅 중에 중단 점을 두려는 경우입니다.
또한 내가 생각하는 일부 도구에 의해 생성되는 기본 코드입니다.


똑같은 오류가 다시 발생하지만 이것으로 아무것도 얻지 못합니다.
때때로 catch 메서드를 사용하여 다음과 같이 예외를 중단하지 않고 로깅 또는 작업을 수행 할 수 있습니다.

catch (Exception) {
  myLogger.Log(LogLevels.Exception, "oh noes!")
  throw; 
}

처음에는 이것이 스택이 풀릴 것이라고 착각하게 생각했지만 다음을 수행하는 경우에만 가능합니다.

catch (Exception err) {
  throw err; 
}

현재 예외를 다시 던지면 해당 예외가 "소스"와 스택 추적을 유지합니다.

참고 URL : https://stackoverflow.com/questions/2728640/what-does-throw-by-itself-do

반응형