首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VB.net类中的可空公共属性不能接受0(零)作为赋值?

问为什么VB.net类中的可空公共属性不能接受0(零)作为赋值?
EN

Stack Overflow用户
提问于 2009-04-17 14:44:59
回答 4查看 9.6K关注 0票数 3

我在使用Vb.net 3.5的类上有一个可以为空的公共属性:

代码语言:javascript
复制
    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(零)的时候。

代码语言:javascript
复制
    If FundBuySell = "Exchange $" Or FundBuySell = "Exchange Shares" Then
            TicketCharge = 0
    Else

当我赋值0,然后检索它时,它显示属性= nothing。

我需要属性有时为空,有时为零。有人能解释一下发生了什么吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-17 14:48:30

If _TicketCharge = Nothing没有做你期望的事情(挑衅的评论:和VB.NET一样;抱歉,伙计们,无法抗拒)。您需要If _TicketCharge Is Nothing或If Not _TicketCharge.HasValue

票数 2
EN

Stack Overflow用户

发布于 2009-04-17 14:53:30

进一步解释:

引用类型的"null“值和值类型的”默认“值在VB.Net中都不会有双重作用。当您使用"=“而不是" is”或"HasValue“时,您将强制它成为值类型角色,因此Nullable类将把它与它当前存储的值进行比较(包括在没有设置值的情况下抛出异常!)。由于小数的默认值为0,因此Get访问器顶部的比较结果为True。

票数 1
EN

Stack Overflow用户

发布于 2009-04-17 14:54:48

问题在于您比较_TicketChange以确定它是否具有值的方式。Nothing在VB.Net中有多种含义,因为它同时表示空值和引用类型。使用Nothing和Nullable执行布尔逻辑通常会导致意外的行为。

请改用_TicketChange.HasValue。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/760675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档