2011-11-01 4 views
5

은 "ok"코드입니까? 그것은이 (가) DB마침내 try/catch를 사용하는 것이 좋습니다?

에 연결 이후이 그렇게 나에게 이상한 모양

 try 
     { /*stuff*/ } 
     catch (Exception e) 
     { /*stuff*/ } 
     finally 
     { 
      try 
      { /*stuff*/ } 
      catch { /*empty*/ } 
     } 

나는 최종적으로 복잡한 작업을 할 필요가 있으며이 충돌 할 수 있습니다. 이게 적절한 방법입니까?

+4

......... –

+6

건강 상태가 좋으면 약을 복용해도 괜찮습니까? 여기서 공백을 채우자. try/catch의 개념에는 아무런 문제가 없습니다.하지만 수행하려는 작업과 최종 목표가 무엇인지에 따라 문제가 발생할 수 있습니다. – corsiKa

+0

마침내 당신이 무엇을 할 것인지 맹목적으로 말해 줄 수 있습니까? – Purplegoldfish

답변

3

이것은 실제로 당신이하는 일에 달려 있습니다.하지만 개인적으로, 다른 사람이 진정한 시도를 한 후에 잡아서 작업을 마친 후에는 마침내 그것을 중첩시키지 않을 것입니다. . 그것은 그것의 "기이함"의 일부를 제거 할 것입니다.

+0

이렇게하면 전체 그림 (코드)을 다시 볼 수있게되고, 실제로는 내 경우에는 마침내 제거하고 원래의 것 다음에 try/catch를 추가하는 것이 좋습니다. – Fredou

1

중첩 된 try/catch 블록은 이상적이지 않지만 경우에 따라 필요합니다. 오류를 올바르게 처리하십시오.

0

예. finally의 예외는 원래 예외를 숨길 것입니다. 이는 not to use using in WCF while creating proxies과 비슷하지만 그 자체는 다른 논의입니다.

이 뜻을 출력 B 라기보다는 :

static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new ApplicationException("A"); 
      } 
      finally 
      { 
       throw new ApplicationException("B"); 
      } 
     } 
     catch (Exception e) 
     { 

      Console.WriteLine(e.Message); 
     } 
     Console.Read(); 
    } 
1

Idomatically, 당신은이 작업을 수행 할 것입니다 :

try 
{ 
    /* stuff */ 
} 
catch 
{ 
    /* stuff */ 
} 
finally 
{ 
    DoStuff(); 
} 


void DoStuff() 
{ 
    try 
    { 
     /* stuff */ 
    } 
    catch 
    { 
     /* stuff */ 
    } 
} 
+0

이것은 의미가 없으며, 어떻게 문제가 해결되는지 보지 않으며 이상적인 상황이 아닙니다. 나는 catch 문이 각각의 메서드 내에서 호출되는 자체 메서드에 있어야한다고 주장합니다. 이러한 메서드는 값을 반환해야합니다. –

0

예. 일반적으로 다른 예외가 활성화되어있는 동안 예외를 던지면 첫 번째 예외가 두 번째 (나중에) 예외로 바뀝니다.

public static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new Exception("first exception"); 
      } 
      finally 
      { 
       //try 
       { 
        throw new Exception("second exception"); 
       } 
       //catch (Exception) 
       { 
        //throw; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 
  • 코드를 실행하고 당신은 시도 및 캐치 문을 참조 "두 번째 예외"
  • 의 주석을 해제하고 당신은 "첫째 예외"가 표시됩니다 : 여기

    은 어떻게되는지 보여 몇 가지 코드
  • 또한 주석의 주석을 제거하십시오. "두 번째 예외"가 다시 나타납니다.
관련 문제