2011-08-05 5 views
0

.net 4コンソールアプリのサンプルなぜこれは最終的に実行されないのですか?

私はvs 2010でこれを実行すると、(キャッチから)投げつけているように見え、最終的には得られません。それはスローで壊れ、例外を示して、私はf5をヒットし、それはスローのループのようにほとんどrethrows。他のexeで同様のコードを使用して、私はコンソールに例外をスローし、最終的にクリーンアップを実行することができました。それはそうではない、なぜ私は不思議に思っている。

static void Main(string[] args) 
    { 
     try 
     { 
      throw new Exception("Exception"); 
     } 
     catch(Exception) 
     { 
      Console.WriteLine("Catch"); 
      throw; 
     } 
     finally 
     { 
      Console.WriteLine("Finally"); 
     } 
    } 
+2

「キャッチ」と「最後に」と書いて、例外のためにクラッシュする必要があります。何が起こるのではないですか? –

+0

catchステートメント内で同じ例外がスローされるため、そのループが発生します。 –

+8

@ramhoundえええええええええええええええええええええええええ、あなたは 'キャッチ'にいると、投げても 'キャッチ'セクションの先頭に戻ってくることはありません! –

答えて

10

逆に、finallyブロックを実行します。これが出力されます。

Catch 

Unhandled Exception: System.Exception: Exception at ConsoleApplication1.Program.Main(String[] args) in C:\Desktop\ConsoleApplication1\Program.cs:line 24 
Finally 
+0

私は同意する、私は同じ結果を参照してください。 – Leons

2

私は最終的に実際に実行されますが、最終的にはコンソールオブジェクトには、コンソールアプリケーションの主な方法であることは、もはや利用できないを賭けるだろう。

+0

私のテストでは、ブレークポイントを追加すると、これが該当することがわかります。最終的には間違いなくヒットします。多分、この時点でコンソールは聞いていないでしょう。 – Fenton

2

デバッグを使用してプログラムを開始すると、コードは「未処理例外」というメッセージで停止します。これは最終的に実行される前です。デバッグなしで実行すると、意図したとおりに動作します(CTRL-F5)。

static void Main(string[] args) 
{  
    try 
    { 
     Method(); 
    } 
    catch (Exception) 
    { 
     Console.WriteLine("caught in main"); 
    } 
    Console.ReadKey(); 
} 
public static void Method() 
{ 
    try 
    { 
     throw new Exception("Exception"); 
    } 
    catch (Exception) 
    { 
     Console.WriteLine("Catch"); 
     throw; 
    } 
    finally 
    { 
     Console.WriteLine("Finally"); 
    } 
} 
+0

OPのコードのfinallyブロックを壊すことはありませんでした。 –

0

あなたは@デビッドHeffernanのは、彼に示されたように、それは確かに、実行されることを保証することができます:あなたが最終的に例えば、別のtry-catchブロック内でごtestcodeを移動することによって実行されていることを確認することができ、デバッガを使用して

出力;

制御 は、try文を離れるとfinallyブロックのステートメントが常に実行されています。しかし、あなたはそれがあるべきである確信することために、(8.10)C#の仕様で言われているものを検討してください。これは、 break、continue、goto、またはreturn文を実行した結果、または がtry文から例外を伝播した結果、通常の実行の結果として制御転送 が発生した場合に当てはまります。

関連する問題