如何真正检查VB.NET中是否为空?

时间:2012-10-04 13:57:51

标签: asp.net .net vb.net

我有一个具有NrPeso十进制属性的实体,可以在数据库中保存为0或null。 以下是我为该属性分配值所做的工作:

entity.NrPeso = Convert.ToDecimal(object.value("value"))

问题是:如果我没有填写对象值,则将其设置为Nothing。当我进行演员表演时它变为0.但我不想要0,我想要Nothing。如果我将对象值与Nothing进行比较,如果它是Nothing或0,它将返回Nothing

我选择了一些替代方案,但它们看起来并不好。

那么,这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:4)

Decimal是一个结构 - 根据定义,不能是Nothing

您需要可以为空的 Decimal

如果NrPeso被定义为Nullable(Of Decimal)(又名Decimal?),那么事情应该按照您的预期运作。

答案 1 :(得分:1)

如果您想在使用0(或任何其他值类型)时区分NothingDecimal,则应首先使用nullable type。< / p>

因此请使用Decimal?代替Decimal

答案 2 :(得分:0)

试试这个:

Dim obj As Object = object.value("value")
entity.NrPeso = If (obj Is Nothing, Nothing, Convert.ToDecimal (obj))

答案 3 :(得分:0)

不要使用Convert.ToDecimal,而是考虑使用Decimal.TryParse,然后在失败条件下将Nullable类型显式设置为Null:

Dim outVal As Decimal?
If Decimal.TryParse(object.value("value"), outVal)
   entity.NrPeso = outVal
Else
   entity.NrPeso = Nothing
End If

此外,请考虑在项目中设置Option Strict On以避免将来出现类似问题。