27

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

public decimal myDecimal{ get; set; }

然后我有

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

我在尝试:

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

但我得到了这个:

表达式的结果始终为“真”,因为“十进制”类型的值永远不会等于 null

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

4

8 回答 8

57

小数总是有一些默认值。如果你需要一个可以为空的类型小数,你可以使用decimal?. 然后你可以做myDecimal.HasValue

于 2013-01-29T19:54:42.127 回答
14

你可以使用这个代码

if (DecimalVariable.Equals(null))  
{
   //something statements
}
于 2014-02-03T11:42:04.777 回答
6

decimalvalue type.NET 中的一个。并且值类型不能是null. 但是如果你使用nullable type你的decimal,那么你可以检查你的decimal是否是null。像myDecimal?

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

if (myDecimal.HasValue)

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

于 2013-01-29T19:56:03.497 回答
1

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

if ( !rdrSelect.IsNull(23) ) 
{ 
   //handle parsing
}
于 2013-01-30T14:14:03.690 回答
1

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

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

于 2018-01-23T20:21:19.130 回答
1

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

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

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

于 2019-03-07T17:05:05.030 回答
0

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

于 2013-01-29T19:56:42.323 回答
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);
    } 
于 2013-01-29T20:01:46.647 回答