1

次の例では、データベースから値を返し、その値を double に変換しています。値が NULL であるためにフォールオーバーした場合、デフォルト値として 0 が設定されます。

using (SqlCommand cmd = new SqlCommand(sql.ToString(), conn))
{
    try
    {
        this.value = Convert.ToDouble(cmd.ExecuteScalar());
    }
    catch (Exception)
    {
        this.value = 0;
    }
}

この場合に Try Catch を使用することは、悪い習慣と見なされますか? このシナリオを処理するより良い方法は何でしょうか?

4

3 に答える 3

13

この場合に Try Catch を使用することは、悪い習慣と見なされますか?

絶対。他のことは別として、戻り値が null の場合だけでなく、何かが失敗した場合は 0 を返します。(テーブル全体が削除されたことが判明した場合、すべてが順調であるかのように続行しますか?

null の戻り値を検出したい場合は、明示的に行う必要があります。

object result = cmd.ExecuteScalar();
return result == null ? 0d : (double) result;

ではないnull 以外の戻り値がある場合、これは引き続き(意図的に) スローします。クエリが返す型を知っておく必要があり、型が間違っていることが判明した場合は失敗します。double

于 2013-03-28T15:40:52.113 に答える
5

Double.TryParseが必要です。これはブール値を返し、初期化されていない double 変数を out パラメータで渡し、値が割り当てられます。

于 2013-03-28T15:39:09.567 に答える
0

それは悪い習慣と見なされます。Try Catch は、こ​​のようなプログラム フロー用ではありません。別の例外がスローされた場合でも、それをキャッチして値を 0 に設定します。

プログラムの流れを具体的に確認してください。null を明示的に処理する方が効率的で、従うのも簡単です。

于 2013-03-28T15:40:35.463 に答える