2014-09-22 6 views
5

을 실패합니다. 이러한 이유 때문에 SomeSaferMethod도 catch 문에서 실패 할 경우를 대비하여 SuperSafeMethod이라는 메서드를 호출했습니다.은 try 캐치 모두 내가 다음과 같습니다 몇 가지 코드를

SomeDangerousMethodSomeSaferMethod 둘 다 실패 할 경우 실행되는 제 3의 실행 수준이되도록 try catch를 어떻게 변경합니까?

감사합니다.

+0

이 메서드가 실패 할 것으로 예상되는 경우이 경우에는 예외를 사용하지 마십시오. 대신에'null'을 반환하십시오. 이전에 'null'이 반환되면 다음 안전한 메소드를 호출하십시오. – Henrik

답변

12

은 아마도 try/catch 사용할 수 있습니다 중첩 : 당신이 할 수있는

try 
{ 
    TheString = SomeDangerousMethod(); 
} 
catch 
{ 
    try 
    { 
     TheString = SomeSaferMethod(); 
    } 
    catch 
    { 
     TheString = SuperSaferMethod(); 
    } 
} 

return TheString; 
+0

아, 나는 네가 둥지를 틀 수 있다는 것을 몰랐다. 답변 해주셔서 감사합니다. – frenchie

6

중첩을 피하기 위해 다음과 같습니다. 이렇게하면 원하는만큼 많은 메소드를보다 깔끔하게 사용할 수 있습니다.

Func<string>[] methods = { SomeDangerousMethod, SomeSaferMethod, SuperSafeMethod }; 

foreach(var method in methods) 
{ 
    try 
    { 
     TheString = method(); 
     break; 
    } 
    catch { } 
} 

if (string.IsNullOrEmpty(TheString)) 
    throw new TooMuchUnsafetyException(); 
관련 문제