恢复double的null

时间:2016-07-07 08:57:19

标签: c# sqldatareader datareader

我有一个包含几个字段的表,其中一个是Double类型字段,可以包含空值......

使用ADO和SQLDATAReader我在变量中恢复该字段。我将此变量定义为: Double,Double?,double,double? ...我使用 GetValue 获取了值(来自de SQLDataReader)(并执行了使用 GetDouble ...当值为null时,每个人都会崩溃。

唯一可行的是将此变量定义为对象,但我不想要它。提前思考可能很难在我的项目中处理这种类型......

Quote:当这个值为0或null时,我必须区分这种情况......

任何想法的人?

编辑:

Object.DoubleValue= (Double?)Datos.GetDouble(1);
Object.doubleValue= (double?)Datos.GetDouble(1);

不工作。

Object.ObjectValue= Datos.GetValue(1);

工作。

1 个答案:

答案 0 :(得分:3)

不幸的是,没有开箱即用的方法。但你可以用这样的扩展方法调整它:

(请注意它只是一个粗略的原型,适用于您的情况,但可能需要一些检查和限制等)

public static class Helpers
{
    public static T GetSmartValue<T>(this SqlDataReader r, int ordinal)
    {
        dynamic value = r.GetValue(ordinal);
        if (value == DBNull.Value)
        {
            value = null;
            return value;
        }

        return (T) value;
    }
}

然后在你的代码中

var x = yourReader.GetSmartValue<double?>(1);