可空值是否会同时考虑 null ("") 和 DBNull

Will nullable value consider both null ("") and DBNull at the same time

我有一个条件,如果数据库中的 a 列有 "" 或 DBNull,它应该将其视为 0。

我可以把它写成一行吗?无论如何,我做了很长一段时间的编码。有没有可能更短的方法来实现这个。

这是我的代码:

public string difference(object val1, object val2)
    {

        double value1 = 0;
        double value2 = 0;
        if (val1 == "" && val2 == "")
        {            
            value3 = value1 - value2;
        }
        else if (val1 != "" && val2 != "")
        {
            if (val1 != DBNull.Value && val2 != DBNull.Value)
            {
                value1 = Convert.ToDouble(val1);
                value2 = Convert.ToDouble(val2);
                value3 = value1 - value2;
            }
            else if (val1 == DBNull.Value && val2 == DBNull.Value)
            {

                value3 = value1 - value2;
            }
            else if (val1 != DBNull.Value && val2 == DBNull.Value)
            {
                value1 = Convert.ToDouble(val1);

                value3 = value1 - value2;
            }
            else
            {                
                value2 = Convert.ToDouble(val2);
                value3 = value1 - value2;
            }

        }
        else if (val1 == "" && val2 != "")
        {
            if (val2 == DBNull.Value)
            {
                value3 = value1 - value2;
            }
            else
            {
                value2 = Convert.ToDouble(val2);
                value3 = value1 - value2;
            }
        }
        else
        {
            if (val1 == DBNull.Value)
            {
                value3 = value1 - value2;
            }
            else
            {
                value1 = Convert.ToDouble(val1);
                value3 = value1 - value2;
            }
        }
            return Convert.ToString(value3);        
    }

任何帮助将不胜感激。

你的方法可以简单地写成

public double Difference(object val1, object val2)
{
    double value1;
    double value2;
    double.TryParse(val1.ToString(), out value1);
    double.TryParse(val2.ToString(), out value2);

    return value1 - value2;
}

假设 val1val2 永远不会为空(您的代码也是如此)。我还把 return 类型设为 double。如果你想把它作为字符串调用 double.ToString 方法。