我在使用Vb.net 3.5的类上有一个可以为空的公共属性:
Public Property TicketCharge() As Nullable(Of Decimal)
Get
If _TicketCharge = Nothing Then
Return Nothing
Else
Return _TicketCharge
End If
End Get
Set(ByVal value As Nullable(Of Decimal))
If value.HasValue Then _TicketCharge = value
End Set
End Property
有一种分配价值的方法。它工作正常,除了当我尝试为其赋值0(零)。
If FundBuySell = "Exchange $" Or FundBuySell = "Exchange Shares" Then
TicketCharge = 0
Else
当我指定零然后检索它时,它显示属性=无。
我需要有时属性为Null,有时需要为零。有人可以解释发生了什么吗?
答案 0 :(得分:2)
If _TicketCharge = Nothing
没有按照你的预期行事(煽动性评论:因为它始终与VB.NET一致;对不起家伙,无法抗拒它)。您需要If _TicketCharge Is Nothing
或If Not _TicketCharge.HasValue
答案 1 :(得分:1)
进一步解释:
在VB.Net中,没有任何东西可以作为引用类型的“null”值和值类型的“默认”值。当你使用“=”而不是“Is”或“HasValue”时,你强制它进入值类型角色,因此Nullable类会将它与它的当前存储值进行比较(如果没有值则抛出异常)组!)。由于Decimal的默认值为0,因此Get
访问器顶部的比较结果为True。
答案 2 :(得分:1)
问题在于您比较_TicketChange以确定它是否具有值。 VB.Net中没有任何含义,因为它表示空值和引用类型。使用Nothing和Nullable执行布尔逻辑将导致经常出现意外行为。
而是使用_TicketChange.HasValue。
答案 3 :(得分:1)
最后这有效:
If Not IsDBNull(var)