のtryブロックで発生した場合、私は、次のC#のコードを持つブロックするために見逃していませんtryブロックで得られたリソースを解放するためにfinallyブロックを実行しなければならないことが理解されるからです。制御フローは、最終的には例外がしようと、最終的には
答えて
通常、処理されない例外がアプリケーションを終了した場合、finallyブロックが実行されているかどうかは重要ではありません。しかし、その状況でも実行されなければならないfinallyブロック内にステートメントがある場合、try-finallyステートメントにcatchブロックを追加する方法があります。また、呼び出しスタックの上位にあるtry-finallyステートメントのtryブロックにスローされた例外をキャッチすることもできます。つまり、try-finallyステートメントを含むメソッドを呼び出すメソッド、またはそのメソッドを呼び出すメソッド、または呼び出しスタック内のすべてのメソッドで例外をキャッチすることができます。例外がキャッチされない場合、finallyブロックの実行は、オペレーティングシステムが例外の巻き戻し操作をトリガするかどうかによって異なります。
参考:https://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
これを検証するためには、私はこのようなあなたのサンプルを試してみましたが、それは最終的にブロックを実行します。 この試してみてください:あなたは、[このフィドル](https://dotnetfiddle.net/wf8DN9)から見ることができるように
public class MainClass {
public static void Main()
{
try {
Invalid();
}
catch (Exception ext) {
Console.Write(ext.Message);
}
}
public static void Invalid()
{
string message = "new string";
object o = message;
try
{
int i = (int)o;
}
finally
{
Console.WriteLine("In finally");
}
}
}
「解決策」は必要ありません。 finallyブロックは常に*実行されます。 –
- 1. pythonキーワードcontinueは最終的にキーワードに制御を移しています
- 2. 制御フロー例外
- 3. が観測は最終的に
- 4. C#トライキャッチ最終的に例外が未処理
- 5. java:例外:常に最終的に到達?
- 6. Spock:PollingConditionsが最終的に例外がスローされると予想します
- 7. Spriteオブジェクトの最終的なサイズを制御する
- 8. zend paginatorは最終的にLIMIT OFFSET
- 9. C++プログラミング、最終的にはモバイル
- 10. Javaがしようと、最終的には内側のtry-catchパターン
- 11. Pascal(スクリプト)と例外制御フロー
- 12. okhttp3.Responseクラスが最終的にはどうですか?
- 13. 制御フローC#(境界外例外)
- 14. フロー制御用に最適なQtウィジェット
- 15. CDI Beanは、最終的な方法
- 16. Stringはなぜ最終的ですか?
- 17. 最終的なキーワードは何ですか?
- 18. Python例外制御/フローの問題
- 19. 例外処理でのフロー制御
- 20. 最終的にpython以外で使用することはできますか?
- 21. バベル-ポリフィルの約束と、「最終的には」サポート
- 22. 最終的な変数
- 23. Xcodeシンボルアイコン...最終的なリスト?
- 24. SIFTの最終的なディスクリプタ
- 25. 抽象クラスには最終的なメソッドがありますか?
- 26. 「正確な再暴走」と最終的な例外との関係
- 27. 最終的にはDelphiで試してみてください。
- 28. ORMの傾向は最終的にDBAを殺しますか?
- 29. try ...最終的にMsBuildで同等
- 30. MATLABで最終的に同等のtry ...
を、これは真実ではありません。あなたの問題を示す[mcve]を提供してください。 –
はい、それはdotnetfiddleで動作しますが、私はVisual Studio 2013でそれを実行している間、あなたの場合のように、最後にブロックするように制御を渡すことなく次の例外をスローします。未処理の例外:System.InvalidCastException:指定されたキャストが無効です。 at exceptionHandling.Program.Main()in c:\ Users \ Kifayat \ Desktop \ Learn \ excepti onHandling \ exceptionHandling \ Program.cs:行69 –
それでも実行されます。あなたが見ている可能性があるのは、finallyブロックが実行される前の、未処理の例外をVisual Studioが壊すことです。 'Run'をもう一度押すとfinallyブロックが実行されます。 –