私の知る限り、try / catchを使用するのは、例外を実際に処理する場合のみであり、レポートしてログに記録してからアプリケーションをクラッシュさせるだけではありません。それ以外の場合は、意味のあるさまざまなシナリオをチェックするか(sth == nullの場合など)、または-目的が例外をログに記録してアプリケーションをクラッシュさせるだけの場合-AppDomain.UnhandledExceptionを使用することをお勧めします。しかし、これは常に当てはまり、その理由は何ですか?
次のメソッドを想定します。このメソッドは、配列を受け入れ、データベースおよびファイルシステムの操作を実行した後にMemoryStreamを返します。
MemoryStream Read (int[] IDs)
{
try
{
using (SqlConnection connection = new SqlConnection(connection_string))
{
connection.Open();
// a bunch of code executing SQL queries & constructing MemoryStream, which is returned at the end of the block
}
}
catch (Exception e)
{
// report the exception to the user & log it
throw; // pointles??
}
}
次のような、例外的/望ましくない動作と見なすことができる複数の状況があります。
- 引数(IDs [])がnullであり、
- SQL接続の確立に失敗しました。
- 特定のSQLクエリの実行に失敗しました。
これらのケースはすべて例外と見なされますが、例外をログに記録したいだけの場合(その後クラッシュ)、すべてをtry / catch内に置くことは、おそらく悪い習慣ですが、なぜですか?上記の場合の最良の処理動作は何でしょうか?try / catchを完全に避け、ifステートメントを使用してnull参照をチェックし(このような場合はnullを返します)、AppDomain.UnhandledExceptionを使用して他のすべてをログに記録しますか?try / catchを使用しますが、ifステートメントを使用して内部のnull参照をチェックしますか(その場合はreturn)?他に何かありますか?