为什么VB.net类中的Nullable公共属性不会接受0(零)作为赋值?

时间:2009-04-17 14:44:59

标签: vb.net nullable

我在使用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,有时需要为零。有人可以解释发生了什么吗?

4 个答案:

答案 0 :(得分:2)

If _TicketCharge = Nothing没有按照你的预期行事(煽动性评论:因为它始终与VB.NET一致;对不起家伙,无法抗拒它)。您需要If _TicketCharge Is NothingIf 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)