2013-03-06 3 views
1

제목이 약간 잘못되었지만이 문제는 나에게 매우 솔직하게 보입니다. 내가 try-catch-finally 블록 있습니다. try 블록에서 예외가 throw 된 경우에만 finally 블록의 코드를 실행하고 싶습니다. 지금 코드의 구조는 다음과 같습니다finally 절에서 예외 처리

try 
{ 
    //Do some stuff 
} 
catch (Exception ex) 
{ 
    //Handle the exception 
} 
finally 
{ 
    //execute the code only if exception was thrown. 
} 

지금 내가 좋아하는 플래그를 설정하는 것입니다 생각할 수있는 유일한 해결책 :이 나쁜 일을 볼 수 있지만 경우가 궁금 것을하지

try 
{ 
    bool IsExceptionThrown = false; 
    //Do some stuff 
} 
catch (Exception ex) 
{ 
    IsExceptionThrown = true; 
    //Handle the exception 
} 
finally 
{ 
if (IsExceptionThrown == true) 
    { 
    //execute the code only if exception was thrown. 
    } 
} 

던져진 예외가 있는지 확인하는 또 다른 (더 나은) 접근법입니까?

+1

가 왜 캐치() 섹션에있는 코드를 삽입하지 않을까요? – Larry

+0

당신이 찾고있는 것은 CLR에 존재하지만 C#에서는 구현되지 않은'fault'입니다. –

+0

@Laurent - 여러개의'catch' 절이 있고 어떤 예외가 발생했을 때 실행되어야하는 몇 가지 공통적 인 코드가 더 실제적인 예가 될 것이라면 실제 사용법이 될 것이라고 생각합니다. –

답변

12

무엇과 같이 약 : Catch 블록을 위해 만들어진 무엇

try 
{ 
    // Do some stuff 
} 
catch (Exception ex) 
{ 
    // Handle the exception 
    // Execute the code only if exception was thrown. 
} 
finally 
{ 
    // This code will always be executed 
} 

!

+0

+1 어떻게 작동하는지 명확하게 보여줍니다. – Larry

4

finally을 사용하지 마십시오. 항상을 실행해야하는 코드를위한 것입니다. 내가 어떤을 볼 수 없습니다

//execute the code only if exception was thrown. 

//Handle the exception 

사이

정확히 실행하는 경우의 측면에서 차이가 무엇

.

0

Try/Catch 문의 마지막 부분은 예외가 발견되었는지 여부에 관계없이 항상 시작됩니다. 이 시나리오에서는 사용하지 않는 것이 좋습니다.

try 
{ 
    // Perform Task 
} 
catch (Exception x) 
{ 
    //Handle the exception error. 

} 
Finally 
{ 
    // Will Always Execute. 
} 
2

당신은 결국 finally 필요하지 않습니다 :

try 
{ 
    //Do some stuff 
} 
catch (Exception ex) 
{ 
    //Handle the exception 
    //execute the code only if exception was thrown. 
}