3

私はこのコードブロックを持っています:

try
{
    int QuestionAnswerID = 0;

    // code block which assign value to QuestionAnswerID 

    item.QuestionAnswerID = QuestionAnswerID;
}
catch (NullReferenceException)
{
    item.QuestionAnswerID = -999;
}

これはループで実行され、ループ内で確実に catch ブロックに 2 ~ 3 回実行されます。このコードはまさに私が望んでいたことですが、try-catch ブロックを使用して既知の問題を処理するのが悪い習慣であるかどうかを知りたかっただけです。

例外をスローする前に if ステートメントを使用して null 値を特定すると、より効率的になりますか?

4

3 に答える 3

11

はい、例外のスローとキャッチは非常にコストがかかるため、これは悪い習慣です。例外は通常の操作では使用せず、エラー処理のみに使用する必要があります。

これを行うための推奨される方法は、オブジェクトが自分自身であるかどうかを確認し、nullそのケースを適切に処理することです。

于 2013-10-22T08:44:53.823 に答える
2

ここでは、try/catch を使用する方が「費用がかかる」(つまり遅い) かどうかは、コードの信頼性ほど重要ではないように思われます。コードで効果的に行っていることは次のとおりです。

block of code where something may go wrong

    various things occur

    specific thing that you have anticipated might cause an error occurs

    various things occur

    set return state to valid value

end of block where something may go wrong

if something went wrong

    set return state to invalid value

end if

return return state

ある段階で何か問題が発生する可能性のあるコード ブロックが作成されます。予想される問題に合わせて設計しますが、他の問題が発生する可能性があり、それらを非表示にします。を使用して、問題が発生すると予想される特定のポイントで null をテストすることにより、if (specific thing == null)予期していなかった潜在的な問題を隠すことを回避できます。

于 2013-10-22T08:54:43.903 に答える
1

トライ キャッチは比較的高価な操作であり、「例外的な状況」でのみ使用する必要があり、計画している状況では使用しないでください。

編集:

私が意味したことのより良い言葉の例:

通常の実行の一部として、プログラムの流れを変更するために例外を使用しないでください。例外は、エラー状態の報告と処理にのみ使用する必要があります。

http://msdn.microsoft.com/en-us/library/ms173163.aspx

于 2013-10-22T08:45:15.740 に答える