【问题标题】:Check if decimal value is null检查十进制值是否为空
【发布时间】:2013-01-13 12:06:39
【问题描述】:

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

public decimal myDecimal{ get; set; }

然后我有

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

我正在尝试:

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

但我得到了这个:

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

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

【问题讨论】:

  • Decimal 是一个值类型。它永远不能为空。如果您的数据库中的列可以为空,那么它应该由 Decimal? 表示(这是 System.Nullable<Decimal> 的简写
  • 如果rdrSelect[23] 在数据库中为空,Convert.ToDecimal 将失败。
  • 您是否阅读了错误消息。似乎比较清楚。 decimal 不能为空,它总是有一个值。

标签: c# asp.net decimal


【解决方案1】:

小数总是有一些默认值。如果需要nullable type 十进制,可以使用decimal?。那你就可以myDecimal.HasValue

【讨论】:

    【解决方案2】:

    你可以使用这个代码

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

    【讨论】:

    • 亲爱的@AshishJain,亲爱的布莱恩,欢迎您!编码愉快:)
    • 不可为空类型小数的完美解决方案。
    【解决方案3】:

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

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

    if (myDecimal.HasValue)
    

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        Decimal 是一种值类型,因此如果您想检查它是否具有不同于初始化值(零)的值,您可以使用条件 myDecimal != default(decimal)。

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 2014-10-22
                • 2012-07-20
                • 2022-12-31
                • 1970-01-01
                • 2015-05-07
                • 1970-01-01
                • 2018-06-27
                • 2020-09-20
                • 1970-01-01
                相关资源
                最近更新 更多