Search code examples
c#asp.netdoublenullabledbnull

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


I've a condition if the a column in database has either "" or DBNull it should take it as 0.

Can I have that in one line. Anyway I did that coding in the long way. Is there any possible shorter way to achieve this.

This is my code:

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);        
    }

Any help will be greatly appreciated.


Solution

  • Your method could simply be written as

    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;
    }
    

    Assuming val1 and val2 are never null(same is true for your code too). Also I made the return type as double. If you want it as string call double.ToString method.