检查十进制值是否为空

本文关键字:是否 十进制 检查 | 更新日期: 2023-09-27 17:56:37

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

public decimal myDecimal{ get; set; }

然后我有

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

我正在尝试:

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

但我得到这个:

表达式的结果始终为"true",因为值的类型为 "十进制"永远不会等于空

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

检查十进制值是否为空

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

您可以使用此代码

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

decimal是 .NET 中的一个value type。并且值类型不能null。但是,如果您将nullable type用于decimal,那么您可以检查您的decimal是否null。喜欢myDecimal?

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

if (myDecimal.HasValue)

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

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

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

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

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

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

十进制是一种值类型,所以如果你想检查它是否有一个值不是初始化它的值(零),你可以使用条件myDecimal != default(十进制)。

否则,您可能应该考虑使用可为空(十进制?)类型并使用诸如myNullableDecimal.HasValue之类的条件

如果直接从 SQL 数据库拉取此值,并且其中的值为 null,则它实际上是DBNull对象,而不是 null。要么在转换之前进行检查,并在发生DBNull时使用默认值,要么在转换之后将空检查替换为DBNull rdrSelect[23]检查。

在这种情况下

,您还可以创建一个方便的实用程序函数来处理数据库中的值。下面是从对象类型为您提供可为空的十进制的函数。

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