2012-10-04 60 views
1

我有一个NrPeso十进制属性的实体,可以保存在数据库中为0或null。 下面是我在做什么的值赋给属性:如何真正检查VB.NET中的东西是否为空?

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

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

我用了几个替代方法,但它们看起来不太好。

那么,正确的做法是什么?

+0

如果'NrPeso'是十进制类型,那么无论如何它都不能被分配空值,所以在这里看不到这一点。 –

+0

_“我有一个实体”_表示您正在使用Entity-Franmework?然后这是[如何在实体框架中将字段设置为DBNull]的副本(http://stackoverflow.com/questions/820752/how-do-i-set-a-field-to-dbnull-in- entity-framework) –

回答

4

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

您需要一个可为空Decimal

如果NrPeso被定义为Nullable(Of Decimal)(又名Decimal?),因为你期望的方式工作。

+0

非常感谢。 – gabsferreira

1

如果你想使用Decimal(或任何其他值类型)时0Nothing区分,你应该首先使用nullable type

所以使用Decimal?代替Decimal

0

试试这个:

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

而不是使用Convert.ToDecimal的,可以考虑使用Decimal.TryParse,然后在明确设置空类型为Null故障条件:

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

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

相关问题