繁体   English   中英

检查十进制值是否为空

[英]Check if decimal value is null

我想检查十进制数是否为NULL或它有一些值,因为该值是从类对象的数据库中分配的:

public decimal myDecimal{ get; set; }

然后我有

myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());

我在尝试:

if (rdrSelect[23] != DBNull.Value)
                    {
                        myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
                    }

但是我得到了这个:

表达式的结果始终为“true”,因为“decimal”类型的值永远不会等于null

如何检查该十进制数是否有值?

小数将始终具有一些默认值。 如果你需要一个可空的十进制类型 ,你可以使用decimal? 然后你可以做myDecimal.HasValue

你可以使用这段代码

if (DecimalVariable.Equals(null))  
{
   //something statements
}

decimal是.NET中的value type 值类型不能为null 但是如果你为你的decimal使用nullable type ,那么你可以检查你的decimal是否为null 喜欢myDecimal?

可空类型是System.Nullable结构的实例。 可空类型可以表示其基础值类型的正常值范围,以及额外的值。

if (myDecimal.HasValue)

但我认为在您的数据库中,如果此列包含可空值,则它应该是decimal类型。

假设您正在读取数据行,您想要的是:

if ( !rdrSelect.IsNull(23) ) 
{ 
   //handle parsing
}

Decimal是一个值类型,因此如果您希望检查它是否具有除了初始化为(零)的值以外的值,您可以使用条件myDecimal!= default(decimal)。

否则你应该考虑使用可空(十进制?)类型并使用一个条件,如myNullableDecimal.HasValue

如果您直接从SQL数据库中提取此值并且该值为null,则实际上它将是DBNull对象而不是null。 无论是事先放置在检查你的转换和在发生使用默认值DBNull ,或对检查后更换您的空检查rdrSelect[23]DBNull

您还可以创建一个方便的实用程序函数来处理来自DB的值,例如这些情况。 防爆。 下面是从对象类型中为您提供Nullable Decimal的函数。

    public static decimal? ToNullableDecimal(object val)
    {
        if (val is DBNull ||
            val == null)
        {
            return null;
        }
        if (val is string &&
            ((string)val).Length == 0)
        {
            return null;
        }
        return Convert.ToDecimal(val);
    } 

我最近在尝试从db中从DataTable对象检索空小数时遇到了这个问题,我在这里没有看到这个答案。 我发现这更简单,更短:

var value = rdrSelect.Field<decimal?>("ColumnName") ?? 0;

这在我的情况下很有用,因为我在模型中没有可以为空的小数,但需要快速检查一个。 如果db值恰好为null,那么它只会分配默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM