2012-10-04 64 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以避免將來出現類似的問題。

相關問題