3

Vb.net 3.5 を使用して、クラスに null 許容のパブリック プロパティがあります。

    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 にすることもあれば、Zero にすることもあります。誰かが何が起こっているのか説明できますか?

4

4 に答える 4

2

は期待どおりのIf _TicketCharge = Nothing動作をしていません(炎症性のコメント:VB.NETの場合は常にそうであるように、申し訳ありませんが、抵抗できませんでした)。あなたは必要If _TicketCharge Is NothingIf Not _TicketCharge.HasValue

于 2009-04-17T14:48:30.123 に答える
1

さらに説明するには:

参照型の「null」値と値型の「デフォルト」値の両方として、VB.Netで二重の義務を引き受けるものはありません。「Is」や「HasValue」ではなく「=」を使用すると、値型の役割に強制されるため、Nullableクラスはそれを現在保存されている値と比較します(値がない場合に例外をスローすることを含む)セットする!)。Decimalのデフォルト値は0であるため、Getアクセサーの上部の比較はTrueと評価されます。

于 2009-04-17T14:53:30.080 に答える
1

問題は、_TicketChangeに値があるかどうかを判断するために_TicketChangeを比較する方法です。VB.Netでは、空の値と参照型の両方を表すため、いくつかの意味はありません。NothingとNullableを使用してブール論理を実行すると、予期しない動作が発生することがよくあります。

代わりに、_TicketChange.HasValueを使用してください。

于 2009-04-17T14:54:48.313 に答える
1

最後にこれはうまくいきました:

If Not IsDBNull(var) 
于 2012-03-01T22:00:56.513 に答える