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