1

ここでも同様の質問がありましたが、まだわからないことがいくつかあります。ブロックを使用する場合、私が知る限りtry-catch、例外がスローされると、catchブロックは直後に実行さcatchれ、同じコードブロック内の句の後のコードは実行されません。だから私がそれを正しく理解すれば:

try
{
    // do something
    // throw an exception for some reason
}
catch (Exceptiox ex)
{
    // do something when there is and exception thrown
}
// some code that will never be runned if and exception was thrown above

範囲外でそれ以上の実行が停止することを100%確信しているわけではありませんcatchが、これは私の質問の1つなので、間違っている場合は訂正してください。

では、値をまったく返す必要がない場合、ブロックreturnで使用する意味は何ですか?catchこれは、私が取り組んでいる継承されたコードのいくつかのメソッドで見られます。例えば:

public void DeleteImage(AppConfig imageInfo, string imageName)
{
    string imgPath = imageInfo.ConfigValue.ToString();
    try
    {
        File.Delete(imgPath + "\\" + imageName);
    }
    catch (Exception ex)
    {
        logger.Error(ex.ToString());
        return;
    }
}

ここでは、エラーをログに記録する以外に何もする必要はありません。なぜそれならreturn。間違いですか?return明示的に行わないと、メソッドは終了しませんか?catch句の後にさらにコードがある場合、returnがなくcatch、エラーをログに記録するためだけに使用された場合、コードは実行されますか?

4

3 に答える 3

12

キャッチがその範囲外でそれ以上の実行を停止するかどうかは100%確信していませんが、これは私の質問の1つなので、間違っている場合は訂正してください。

いいえ、それは正しくありません。ブロック内のコードがフローを変更しない限り(または) catch、実行はブロックの後で通常どおり続行されます。throwreturn

したがって、実行を続行したくない場合return は必要です。現在、ブロックの後にコードがない場合でもcatch、「このタイプの例外を処理するには、この時点以降はコードを実行しない」ことをより明確にすることができます。

とは言うものの、注意する必要があります。catch (Exception ex)すべての種類の例外をキャッチすることは常に疑問視されるべきであり、ほとんどの場合、適切なことではありません(ただし、この場合は、「ルールの許可された例外」であるロギング用です)。 。

于 2013-03-11T09:46:49.890 に答える
3

キャッチがその範囲外でそれ以上の実行を停止するかどうかは100%確信していませんが、これは私の質問の1つなので、間違っている場合は訂正してください。

いいえ、そうではありません。catchブロックが再スローもリターンもしない場合、実行はtry/catchステートメントの最後から続行されます。

あなたが与えたサンプルでは、return​​ステートメントは無意味です。catchブロックの後にコードがある場合、returnステートメントによってメソッドがすぐに返されるため、これは別の問題になります。

完全に有効なコードであり、おそらく意図したとおりに実行されるという点で、そのようなブロックにステートメントを含めることは間違いではありませんが、それは間違いなく奇妙です。ステートメント重要なメソッドからカット/ペーストされた可能性があります。returncatchreturn

(また、ほとんどの場合、捕まえるのは悪い考えExceptionですが、それは別の問題です。)

于 2013-03-11T09:47:12.400 に答える
0

returnステートメントがなく、その代わりにコードがない場合、そのコードは実行されます。そして、あなたはキャッチブロックから何でも返すことが許されています。制限はありません。

于 2013-03-11T09:49:59.450 に答える