我想创建一个函数(C#):C#:从函数返回dbnull.value或system.type?
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
但没有从int到DBNull.Value演员。 有什么办法可以创建这样的功能?
我想创建一个函数(C#):C#:从函数返回dbnull.value或system.type?
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
但没有从int到DBNull.Value演员。 有什么办法可以创建这样的功能?
让我们假设你的DBMS是SQLServer的,你可以将你的函数
object PutInt (int? x)
{
if (x.HasValue)
return (object)x.Value;
else
return (object)DBNull.Value;
}
因为SQLParamater值属性假定类型的对象。希望我回答你的问题。
'return x ?? (object)DBNull.Value;'? – Andrey 2011-05-08 12:49:42
这本质上是不可能的—值类型不能为空。
您需要使用可为空的类型(int?
),这会使您的函数完全无用。
即使你使用'int?',我仍然认为它不会工作,因为'DBNull'不是'int?'类型 – 2011-05-08 12:28:00
@Fadrian:正确。 – SLaks 2011-05-08 12:29:22
不,你不能投int
到DBNull.Value
。这用于评估数据库字段的内容,而不是可空类型的内容。可为空的类型的值将简单地为null
。
比您定义的函数更好的选项是使用null coalescing operator(??
)。
它与您试图在函数中构建的逻辑非常相似。考虑下面的代码行:
// 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);
这可以重写为'x? DBNull.Value'。更漂亮了吧? – Andrey 2011-05-08 12:32:25
不,你不能,看到我的评论下面的SLaks。 – 2011-05-08 12:34:27
我刚刚开启了VS并尝试一下,证明你不能。如果你尝试使用??,你会得到一个编译错误“运营商”??不能应用于类型'int'和'System.DBNull'的操作数“ – 2011-05-08 12:35:57
你到底想干什么?这与数据库有什么关系? – BoltClock 2011-05-08 12:27:04
我只想把int \ dbnull放到数据库中,并用小算法构建函数,选择我需要在数据库中放入的数据) – dilix 2011-05-08 12:41:12
也许你有设计问题。为什么名为* PutInt *的方法实际返回一个int? – Juliet 2011-05-08 14:28:29