2010-04-09 4 views
0

어떻게하면됩니까?캐치를 시도하십시오 - 마지막으로 If 문에서 어떻게 진행합니까?

void x() 
    {.... 
     if (...) 
     {try 
      {} 
      catch (ComException com) 
       { throw com} 
      finally // in any case, executed fine! 
       {...instructions.......} 

     } 
     ... instructions...// not executed in case of exception because the finally can't embrace the following code too... but this block of code needs to be executed in any case too... 
     {} 


    } 
+0

왜 catch 블록에 예외가 발생합니까? –

+0

@Matthew Jones 나는 OP가 catch 블록 내 일부 로깅 코드를 생략하고 있다고 생각합니다. 그렇지 않다면, 잡기와 재위는 의미가 없습니다. –

+0

나는 특별한 예외 인 Com 하나를 잡아서 호출 메소드에 던져야하기 때문에 어쩌면 구문을 밝게 할 수있다. (im in C#) ....하지만 아무 코드도 없다. catch하지만 던져 .... 그렇지 않으면 어떻게 쓰겠 니? – KitAndKat

답변

1

"else"분기의 코드를 별도의 방법으로 이동하십시오. 그런 다음 그 메소드를 "else"와 "finally"둘 다에서 호출하십시오.

+0

이게 할 수있는 유일한 방법이었습니다. 하지만 지금은 정말 멀리 가져온 것들을 할 필요가있을 때, 그것은 당신의 코드의 기능적 및 개념적 모델의 약점 때문일 수 있다는 것을 배웠습니다 ... 저에게 수치! – KitAndKat

3

논리가 올바르지 않습니다. 코드가 if 문으로 들어가면 else 블록은 실행되지 않습니다.

예외가 발생하더라도 실제로 실행해야하는 경우 else 블록의 코드를 finally 블록에 복사하십시오.

편집 : 그래서 당신이 원하는 것은이 생각 :

try 
{ 
    if() 
    { 
      try 
      { 
       //Code 
      } 
      catch(ComException e) 
      { 
       throw e; 
      } 
    } 
} 
finally 
{ 
    /*....instructions.....*/ 
} 

이 뒤에 이유는 내부의 시도는 IF 문에 해당하는 경우 코드를 실행하고, 다시 던져 다음 잡을 것입니다 ComException를 검출했을 경우 finally 블록의 코드는 IF 문 또는 ComException catch 중 하나에 관계없이 실행됩니다.

위치가 더 잘 설명되어 있습니까?

사과와 함께 dtb; 그는 이것을 먼저 대답했고, 나는 단지 설명을 덧붙였다.

+0

네, 완전히 미안 해요. 다른 건 잘못 됐어요. 제 코드를 편집했는데, 다른 건 없었어요, 미안 해요 ... – KitAndKat

0

뭔가를 실행해야하는 경우 finally 블록에 있어야합니다. 마지막으로 try와 catch 블록에서 어떤 일이 일어나더라도 항상 실행됩니다. "else"컨텍스트는 try/catch/finally 세그먼트 외부에 있습니다.

2

이걸 찾으십니까?

try 
{ 
    if (...) 
    { 
     try 
     { 
      ... 
     } 
     catch (ComException) 
     { 
      ... 
     } 
    } 
} 
finally 
{ 
    ... 
} 

finally 블록은 조건의 유무에 관계없이 실행됩니다.

+0

이 솔루션의 문제는 내 시도로 특정 명령을 대상으로 할 수 없지만 특정 명령을 호출하는 방법에 걸리도록하려는 반면 많은 지침을 받아 들여야합니다. – KitAndKat

+0

@ user313176 : 답변이 업데이트되었습니다. 이건 어때? – dtb

관련 문제