检查十进制值是否为空

时间:2013-01-29 19:52:16

标签: c# asp.net decimal

我想检查十进制数是否为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

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

8 个答案:

答案 0 :(得分:41)

小数始终具有一些默认值。如果您需要nullable type小数,则可以使用decimal?。然后你可以myDecimal.HasValue

答案 1 :(得分:7)

您可以使用此代码

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

答案 2 :(得分:3)

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

一样
  

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

if (myDecimal.HasValue)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

十进制是一种值类型,因此如果您想检查它是否具有除了初始化为(零)的值以外的值,您可以使用条件myDecimal!= default(十进制)。

否则你应该考虑使用可空(decimal?)类型并使用诸如myNullableDecimal.HasValue之类的条件

答案 5 :(得分:0)

如果您直接从SQL数据库中提取此值并且该值为null,则它实际上是DBNull对象而不是null。在转换之前进行检查&在DBNull的情况下使用默认值,或者在rdrSelect[23] DBNull上检查后替换您的空检查。

答案 6 :(得分:0)

在这种情况下,您还可以创建一个方便的实用程序函数来处理来自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);
    } 

答案 7 :(得分:0)

我最近在尝试从db的DataTable对象中检索空十进制时遇到了这个问题,但是我在这里没有看到这个答案。我觉得这更容易,更简短:

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

这对我来说很有用,因为我在模型中没有可为空的小数,但是需要对它进行快速检查。如果db值恰好为空,则将分配默认值。