2010-12-08 3 views
2

나는 UnauthorizedAccessException과 같은 시스템 예외가 있다고 말할 수 있으며 직접 작성한 예외입니다. 예외를 잡는 데 사용해야하는 특정 순서가 있습니까? 나는 그것의 가장 구체적인 것에서 최소한의 것까지 아직도 그것을 추측한다?예외 잡는 순서?

감사합니다 :)

답변

16
그들은 작성된-순서로 잡힌

, 그래서 먼저가장 구체적인 (예외 유형 간의 상속의 관점에서)를 넣습니다.

중요 (및 상속 계층 구조)은 유형이므로, 두 개체가 상속 관계가없는 경우 (즉, YourFunkyExceptionUnauthorizedAccessException에서 직접 또는 간접적으로 상속되지 않는 경우), 문제가되지 않습니다. http://msdn.microsoft.com/en-us/library/ms229014.aspx

  • 에서

  • 1

    예, 먼저 모든 사용자 정의 예외를 catch하고 catch (Exception ex)은 다른 모든 유형을 마지막으로 catch합니다.

    -2

    기본 시스템 수준 예외를 먼저 알아야합니다. 그런 다음 시스템 수준 예외의 래퍼 (또는 상속자)인지 확인한 다음 사용자 지정 예외가 발생합니다. 오류를 발견하고 루트 예외가 무엇인지 모르는 대신 오류의 근본 원인을 파악합니다.

    나를 위해, 나는 일반적으로 어떤 예외도 잡을 수 없다. 시스템에 오류를 허용하고, 예외가 솟아 오르고 그 순서대로 잡는 순서를 찾기 위해 스택 추적을 확인한다.

    - UPDATE 나는이 ..

    try 블록 {

    // 1과 같은 가정이 대답을했다. 시스템 예외를 통해 발생할 수있는 파일 IO 작업

    // 2. (두 번째 사용자 정의 예외를 잡기) 사용자 정의 예외를

    } 캐치 (첫번째 가능한 시스템 예외) {} 캐치를 던질 수있는 웹 서비스 액세스 또는 뭔가 {} 캐치 (예외 예) { // 캐치 모두}

    주문 (다른 사람이 말한 것처럼)은 코드 명령문의 순서대로 볼 수 있습니다.

    +0

    -1 : 절대 아닙니다. 가장 구체적인 것부터 가장 구체적인 것 (기본)까지 잡아라. http://msdn.microsoft.com/en-us/library/ms229014.aspx의 "예외 설계 지침"및 "예외 처리 및 예외"(http://msdn.microsoft.com/en-us/library)를 참조하십시오. /5b2yeyab.aspx. – AMissico

    +0

    나는 내가 말한 것을 분명히하기 위해 위의 나의 대답을 업데이트했다. –