2011-01-06 15 views
6

私はそれをよく理解していることを確認しています。正しいスキーマは正しいですか?最も具体的な例外をキャッチして、キャッチブロックの最後に一般的なキャッチを使用して、より広い例外をキャッチします。キャッチブロックの順序は重要ですか?

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節では、すでにこれまたはすべてのスーパータイプ( 'System.Exception')のすべての例外がキャッチされています。 –

+0

ああこれまで私はこれを知らなかった。ありがとう – Kurru

+0

@ Martinho Fernandes私はコンパイラがそれをコンパイルさせないと思う。 – Loj

関連する問題