2011-01-06 6 views
6

그냥 잘 이해하고 있는지 확인하십시오. 올바른 스키마가 맞습니까? 가장 구체적인 예외를 포착하여 catch 블록 집합의 끝에 일반 catch를 사용하여 광범위한 예외를 catch합니다.catch 블록의 순서가 중요합니까?

try 
{ 
some code 
} 


catch(SomeSpecificException ex) 
{ 
} 
catch(LessSpecificException ex) 
{ 
} 
catch 
{ 
    //some general exception 
} 
+5

네, 올바른 순서입니다. –

+0

중복 된 http://stackoverflow.com/questions/3960259/catching-exceptions-c/3960283#3960283? – sloth

+0

"덜 구체적 인 예외 클래스에서 파생되었습니다"라고 "보다 구체적으로"의미하는 경우 그렇습니다. 그러나, 다른 사람에게서 상속하지 않으면, 당신은 당신이 원하는 순서대로 그들을 넣을 수 있습니다. 당신은'FileNotFoundOnAnyServerException'가'FileNotFoundException'보다 더 구체적이라는 것을 주장 할 수 있습니다. 그러나'FileNotFoundException'을 상속받지 않으면 충돌의 위험이 없으므로 컴파일러는 상관하지 않습니다. – Flater

답변

5

나는 잘못된 순서로 쓰지 않을 것이라고 믿습니다.

이 오류가 발생합니다 :

try 
{ 
    throw new OutOfMemoryException(); 
} 
catch(Exception ex) 
{ 
    "B".Dump(); 
} 
catch(OutOfMemoryException ex) 
{ 
    "A".Dump(); 
} 
+1

"이전 catch 절이 이미이 예외 또는 모든 예외를 catch합니다 ('System.Exception'). –

+0

아 나는 전에 이것을 몰랐다. 감사합니다 – Kurru

+0

@ Martinho Fernandes 나는 컴파일러가 그것을 컴파일하게하지 않을 것이라고 생각합니다. – Loj

관련 문제