我有一个具有NrPeso十进制属性的实体,可以在数据库中保存为0或null。 以下是我为该属性分配值所做的工作:
entity.NrPeso = Convert.ToDecimal(object.value("value"))
问题是:如果我没有填写对象值,则将其设置为Nothing
。当我进行演员表演时它变为0.但我不想要0,我想要Nothing
。如果我将对象值与Nothing
进行比较,如果它是Nothing或0,它将返回Nothing
。
我选择了一些替代方案,但它们看起来并不好。
那么,这样做的正确方法是什么?
答案 0 :(得分:4)
Decimal
是一个结构 - 根据定义,不能是Nothing
。
您需要可以为空的 Decimal
。
如果NrPeso
被定义为Nullable(Of Decimal)
(又名Decimal?
),那么事情应该按照您的预期运作。
答案 1 :(得分:1)
如果您想在使用0
(或任何其他值类型)时区分Nothing
和Decimal
,则应首先使用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以避免将来出现类似问题。