1

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

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

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

我坚持了一些替代方案,但它们似乎并不好。

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

4

4 回答 4

4

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

你需要一个可以为 Decimal的.

如果NrPeso被定义为Nullable(Of Decimal)(aka Decimal?),事情应该会如你所愿。

于 2012-10-04T14:00:47.880 回答
1

如果您想区分使用(或任何其他值类型)0以及Nothing何时使用,您应该首先使用可空类型Decimal

所以使用Decimal?而不是Decimal

于 2012-10-04T14:00:55.697 回答
0

试试这个:

Dim obj As Object = object.value("value")
entity.NrPeso = If (obj Is Nothing, Nothing, Convert.ToDecimal (obj))
于 2012-10-04T14:19:24.290 回答
0

考虑使用 Decimal.TryParse 而不是使用 Convert.ToDecimal,然后在失败条件下将 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 以避免将来出现此类类型问题。

于 2012-10-04T14:20:56.630 回答