C# 如何以更好的方式分配DBNull?

C# 如何以更好的方式分配DBNull?,c#,.net,parsing,datarow,dbnull,C#,.net,Parsing,Datarow,Dbnull,我需要解析一个DataRow中的值,并将其分配给另一个DataRow。如果输入有效,则需要将其解析为一个double,或者在输出中添加一个DBNull值。我正在使用以下代码: public double? GetVolume(object data) { string colValue = data == null ? string.Empty : data.ToString(); double volume; if (!Double.TryParse(colValue

我需要解析一个
DataRow
中的值,并将其分配给另一个
DataRow
。如果输入有效,则需要将其解析为一个
double
,或者在输出中添加一个
DBNull
值。我正在使用以下代码:

public double? GetVolume(object data)
{
    string colValue = data == null ? string.Empty : data.ToString();
    double volume;

    if (!Double.TryParse(colValue.ToString(), out volume))
    {
        return null;
    }
    return volume;
}

public void Assign(DataRow theRowInput,DataRow theRowOutput)
{
    double? volume = GetVolume(theRowInput[0]);

    if(volumne.HasValue)
    theRowOutput[0] = volume.value;
    else
    theRowOutput[0] = DbNull.Value;

    return theRowOutput;
}

有更好的方法吗?

像这样简单的事情怎么样:

double dbl;
if (double.TryParse(theRowInput[0] as string, out dbl))
    theRowOutput[0] = dbl;
else
    theRowOutput[0] = DbNull.Value;
编辑:此代码假定输入为字符串类型。你不是100%清楚的。如果是另一种类型,则需要稍微调整上面的代码。

如何:

    public double? GetVolume(object data)
    {
        double value;
        if (data != null && double.TryParse(data.ToString(), out value))
            return value;
        return null;
    }

    public void Assign(DataRow theRowInput, DataRow theRowOutput)
    {
        theRowOutput[0] = (object)GetVolume(theRowInput[0]) ?? DBNull.Value;
    }

这是我的两分钱:

decimal dParse;
if ((cells[13] == "" ? LP_Eur = DBNull.Value : (Decimal.TryParse(cells[13], NumberStyles.Number, NumberFormat, out dParse) ? LP_Eur = dParse : LP_Eur = null)) != null) {
    throw new Exception("Ivalid format");
}

作为字符串
并不完全相同-例如,原始单元格可以是
int
。实际上,
Convert.ToDouble
可能是一个更好的选择总体来说…@Marc你从哪里得到的原始单元格可能是
int
?纯粹看代码,除了
对象
,它对源代码一无所知…@Marc他正在从数据库中读取它。我想他知道那种类型。我猜他不是显式的。@Adeel我们通过索引器分配给一个
DataRow
单元格,它本质上涉及装箱。。。