对象的可空类型

时间:2009-05-06 07:43:31

标签: c#

使用dotnet 2.0。以下代码可以改进风格吗?

    private object GetObj_Version1(int? num)
    {
        return num ?? (object)DBNull.Value;
    }

演员对我来说有点乱。 下面的版本2避免了演员阵容,但其长篇大论:

    private object GetObj_Version2(int? num)
    {
        object numObj;
        if (num.HasValue)
            numObj = num.Value;
        else
            numObj = DBNull.Value;

        return numObj;
    }

你能想到一个既短又避免演员阵容的替代方案? TIA。

2 个答案:

答案 0 :(得分:6)

在这种情况下,强制转换在运行时不执行任何操作 - 它完全适用于编译器。如果你真的讨厌它,也许:

    static readonly object NullObject = DBNull.Value;
    private object GetObj_Version1(int? num)
    {
        return num ?? NullObject;
    }

但我会自己离开。顺便说一句 - 因为无论如何你要打包它,你可以免除重载,只需使用object - 那么你甚至不需要static字段:

    private object GetObj_Version1(object value)
    {
        return value ?? DBNull.Value;
    }

答案 1 :(得分:0)

如果要将值插入数据库,则可以直接将可空类型作为过程参数传递。

param.Add("@Param1", nullableParam);