3

関数を作成したい(c#):

int PutInt (int? x)
{
    if (x.HasValue)
        return x.Value;
    else
        return DBNull.Value;
}

ただし、intからDBNull.Valueへのキャストはありません。そのような関数を作成する方法はありますか?

4

4 に答える 4

4

これは本質的に不可能です。値型をnullにすることはできません。

null許容型()を使用する必要がありint?ます。これにより、関数がまったく役に立たなくなります。

于 2011-05-08T12:26:09.873 に答える
4

DBMS が SQLServer であると仮定すると、関数を次のように変換できます。

object PutInt (int? x)
{
    if (x.HasValue)
        return (object)x.Value;
    else
        return (object)DBNull.Value;
}

SQLParamater Value プロパティはオブジェクト型を想定しているためです。ご質問にお答えします。

于 2011-05-08T12:30:43.473 に答える
1

intいいえ、 にキャストすることはできませんDBNull.Value。これは、null 許容型ではなく、データベース フィールドの内容を評価するために使用されます。null 許容型の値は単純にnull.

定義した関数よりも優れたオプションは、null 合体演算子( ??) を使用することです。

関数で構築しようとしたものと非常によく似たロジックがあります。次のコード行を検討してください。

// Declare a nullable int, and set it to null
int? x = null;

// Assign int y to x, unless x is null, in which case, set y = -1
int y = x ?? -1;

// The variable y now has a value of -1
Console.WriteLine(y);
于 2011-05-08T12:29:29.630 に答える
1

オブジェクト変数型に代入するだけの場合は、メソッドの使用を忘れて、条件付き代入のみを使用することをお勧めします

 object obj = (x.HasValue? x.Value : DBNull.Value);
于 2011-05-08T12:30:49.080 に答える