1

をブロック:実行トライの順序、キャッチ、私はこのようないくつかのC#のコードを持っていると仮定し

try { 
    Method1(); 
} 
catch(...) { 
    Method2(); 
} 
finally { 
    Method3(); 
} 
Method4(); 
return; 

私の質問は、例外がスローされない提供され、法3は、()(法4の前に実行されます)、またはブロックfinallyは、return,continueまたはbreakの文の前に実行されるのでしょうか?

+6

これはテストするのが簡単ではないようです。 – David

+0

何が起こり、どのような順序で表示されるかを簡単なコンソールアプリケーションで記述しなかった理由を知っていますか? – CodingYoshi

+0

申し訳ありませんが、私は初心者の開発者であり、自分で試してみるという考えを思いつきませんでした。 Googleでの検索の後、私は答えを見つけることができなかったので、ここでそれを尋ねることにしました。 – serious6

答えて

5

はい、try-catchfinallyブロックは、あなたが期待するよう順序で実行され、その後、実行は(全体try-catch-finallyブロックを完了した後)、コードの残りの部分に進みます。

try-catch-finallyブロック全体を、他のメソッド呼び出しと同じように機能する単一のコンポーネントと考えることができます(コードはその前後にコードが実行されます)。

// Execute some code here 

// try-catch-finally (the try and finally blocks will always be executed 
// and the catch will only execute if an exception occurs in the try) 

// Continue executing some code here (assuming no previous return statements) 

try 
{ 
    Console.WriteLine("1"); 
    throw new Exception(); 
} 
catch(Exception) 
{ 
    Console.WriteLine("2"); 
} 
finally 
{ 
    Console.WriteLine("3"); 
} 
Console.WriteLine("4"); 
return; 

次のような出力が得see an example of this in action hereを行うことができます

1 
2 
3 
4 
4

シーケンスが常になります

try 
--> catch(if any exception occurs) 
--> finally (in any case) 
--> rest of the code (unless the code returns or if there is any uncaught exceptions from any of the earlier statements) 

便利なリソース:https://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx

+1

残りのコードは、キャッチされない例外のためにスキップされます。 – juharr

+0

@juharr正解、私の答えを編集しました! – Sameer

1

私の質問は、例外がスローされない提供され、法3は、()(法4の前に実行されます)、

はい、Method3があるため、例外かどうかMethod4前に実行されますスローされたかどうか、実行はfinallyブロックに移動し、そこから処理を進めます。

finallyブロックはreturn文、continue文またはbreak文の前にのみ実行されるのでしょうか?

いいえ、例外があったかどうかにかかわらず、常にtryブロックの後に実行されます。あなたは、このお持ちの場合

重要なポイント

は:例外がDoOne()その後、DoTwo()DoThree()によってスローされた場合

try 
{ 
    DoOne(); 
    DoTwo(); 
    DoThree(); 
} 
catch{ // code} 
finally{ // code} 

と呼ばれることはありません。したがって、tryブロック全体が常に実行されるとは思わないでください。実際には、例外がスローされるまでの部分だけが実行され、実行はcatchブロックに移動します。

例外があったかどうかにかかわらず、最後は常に実行されます。

関連する問題