2009-05-06 8 views
2

dotnet 2.0を使用しています。次のコードをスタイルで改善できますか?オブジェクトにnullable型を入力する

private object GetObj_Version1(int? num) 
    { 
     return num ?? (object)DBNull.Value; 
    } 

キャストがちょっと乱雑に見えます。 バージョン2以下のキャストを回避しますが、その長いったらしい:

private object GetObj_Version2(int? num) 
    { 
     object numObj; 
     if (num.HasValue) 
      numObj = num.Value; 
     else 
      numObj = DBNull.Value; 

     return numObj; 
    } 

はあなたが短いの両方で、キャストを回避し、代替を考えることができますか? TIA。

+0

: - あなたはとにかくそれをボックスしようとしていることから、あなたが過負荷で済ます、そしてちょうどobjectで仕事ができる - 余談として、その後あなたもstaticフィールドを必要としませんnullable型をオブジェクトに挿入しますか? – stevehipwell

+0

返されるオブジェクトは、System.Data.SqlClient.SqlParameter.Valueを設定するために使用されます。 –

答えて

6

この場合、キャストは実行時に何も行いません。純粋にコンパイラ用です。あなたが本当にそれを憎むなら、おそらく:

static readonly object NullObject = DBNull.Value; 
    private object GetObj_Version1(int? num) 
    { 
     return num ?? NullObject; 
    } 

しかし、私はそれを残すだろう。あなたがオンにする必要がありますなぜ

private object GetObj_Version1(object value) 
    { 
     return value ?? DBNull.Value; 
    } 
+0

ありがとうございます。この場合、ランタイムのペナルティがないので、私はキャストに固執するように見えます。 –

0

データベースに値を挿入する場合は、null可能な型をプロシージャのパラメータとして直接渡すことができます。

param.Add("@Param1", nullableParam); 
+0

nullableParamに値がない場合、それは 'null'にボックス化され、' null'値を持つパラメータは送られません。したがって、SPなどにnull以外のデフォルトがある場合、これは異なるものになります。もちろん、これを使用してコマンドを実行する前にパラメータ値を修正することができます。 –

関連する問題