0

try/catchおよびを使用しthrowて例外を処理します。そのtry/catchため、ファイルが利用できないなどの問題を含むキャプチャエラーを使用し、間違った値が含まれているthrow場合に使用しています。text

私の基本的なレイアウトは次のMain()とおりです。

   while ((line = sr.ReadLine()) != null)
        {
            try
            {
                //get the input from readLine and saving it

                if (!valuesAreValid)
                {
                    //this doesnt make the code stop running
                    throw new Exception("This value is not wrong"); 

                 } else{
                 //write to file
                 }
            }
            catch (IndexOutOfRangeException)
            {
               //trying to throw the exception here but the code stops

            }

            catch (Exception e)
            {

               //trying to throw the exception here but the code stops 


            }

したがって、内部 で例外をスローしていることに気付いた場合、プログラムは停止しませんが、catch ステートメント内でtry/catchスローしようとすると、コードが停止します。Exception誰でもこれを修正する方法を知っていますか?

4

4 に答える 4

3

の内部で例外をスローするcatchと、それによって処理されませんcatch。それ以上ない場合catchは、未処理の例外が発生します。

try {
    try {
        throw new Exception("example");
    } catch {
        throw new Exception("caught example, threw new exception");
    }
} catch {
    throw new Exception("caught second exception, throwing third!");
    // the above exception is unhandled, because there's no more catch statements
}
于 2013-09-27T04:08:36.483 に答える
2

デフォルトでは、catch ブロックで例外を再スローしない限り、例外はキャッチされた「catch」ブロックで上方への伝播を停止します。つまり、プログラムは終了しません。

例外をキャッチせずにプログラムを終了させたい場合は、次の 2 つのオプションがあります。 - 'Exception' の catch ブロックを削除します。

catch (Exception e)
{
   throw e; // rethrow the exception, else it will stop propogating at this point
}

一般に、例外に対する何らかの論理的な応答がない限り、例外をキャッチすることはまったく避けてください。このようにして、プログラムのエラーを引き起こすエラーを「隠したり」抑制したりしません。

また、MSDN のドキュメントは、例外処理を理解するのに非常に適しています: http://msdn.microsoft.com/en-us/library/vstudio/ms229005%28v=vs.100%29.aspx

于 2013-09-27T04:13:16.457 に答える