对象的可空类型

Moe*_*sko 2 c#

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

    private object GetObj_Version1(int? num)
    {
        return num ?? (object)DBNull.Value;
    }
Run Code Online (Sandbox Code Playgroud)

演员看起来有点乱.下面的版本2避免了演员阵容,但其长篇大论:

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

        return numObj;
    }
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 6

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

    static readonly object NullObject = DBNull.Value;
    private object GetObj_Version1(int? num)
    {
        return num ?? NullObject;
    }
Run Code Online (Sandbox Code Playgroud)

但我会自己离开.顺便说一句 - 因为无论如何你要打包它,你可以免除过载,只需要工作object- 那么你甚至不需要这个static领域:

    private object GetObj_Version1(object value)
    {
        return value ?? DBNull.Value;
    }
Run Code Online (Sandbox Code Playgroud)