我想创建一个函数(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 的强制转换。有没有办法创建这样的功能?
这本质上是不可能的——值类型不能为空。
您需要使用可为空的类型 ( int?
),这会使您的函数完全无用。
假设您的 DBMS 是 SQLServer,您可以将函数转换为
object PutInt (int? x)
{
if (x.HasValue)
return (object)x.Value;
else
return (object)DBNull.Value;
}
因为 SQLParamater Value 属性假定类型为 object。希望我回答你的问题。
不,您不能投射int
到DBNull.Value
. 这用于评估数据库字段的内容,而不是可以为空的类型。可空类型的值只是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);