関数を作成したい(c#):
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
ただし、intからDBNull.Valueへのキャストはありません。そのような関数を作成する方法はありますか?
関数を作成したい(c#):
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
ただし、intからDBNull.Valueへのキャストはありません。そのような関数を作成する方法はありますか?
これは本質的に不可能です。値型をnullにすることはできません。
null許容型()を使用する必要がありint?
ます。これにより、関数がまったく役に立たなくなります。
DBMS が SQLServer であると仮定すると、関数を次のように変換できます。
object PutInt (int? x)
{
if (x.HasValue)
return (object)x.Value;
else
return (object)DBNull.Value;
}
SQLParamater Value プロパティはオブジェクト型を想定しているためです。ご質問にお答えします。
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);
オブジェクト変数型に代入するだけの場合は、メソッドの使用を忘れて、条件付き代入のみを使用することをお勧めします
object obj = (x.HasValue? x.Value : DBNull.Value);