3

我想创建一个函数(c#):

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

但是没有从 int 到 DBNull.Value 的强制转换。有没有办法创建这样的功能?

4

4 回答 4

4

这本质上是不可能的——值类型不能为空。

您需要使用可为空的类型 ( 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 属性假定类型为 object。希望我回答你的问题。

于 2011-05-08T12:30:43.473 回答
1

不,您不能投射intDBNull.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);
于 2011-05-08T12:29:29.630 回答
1

如果您只是分配给对象变量类型,我建议您忘记使用该方法而只使用条件分配

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