我想检查十进制数是否为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
如何检查该十进制数是否有值?
答案 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值恰好为空,则将分配默认值。