Warum nicht eine null-Öffentliches Eigentum in VB.net Klasse akzeptieren Sie 0 (null) als Zuordnung?
Habe ich eine null-öffentliche Eigenschaft für eine Klasse mit 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
Gibt es eine Methode, die weist Ihr den Wert. Es funktioniert gut, außer wenn ich versuche weisen Sie den Wert 0 (null) zu.
If FundBuySell = "Exchange $" Or FundBuySell = "Exchange Shares" Then
TicketCharge = 0
Else
Wenn ich null zuweisen und es dann abrufen, er zeigt die Eigenschaft = nothing.
Brauche ich die Eigenschaft auf Null sein, und manchmal Null, manchmal. Kann mir jemand erklären, was Los ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
If _TicketCharge = Nothing
ist nicht zu tun, was Sie erwarten (entzündliche Kommentar: wie immer mit VB.NET; sorry Jungs, konnte nicht widerstehen). Sie müssen entwederIf _TicketCharge Is Nothing
oderIf Not _TicketCharge.HasValue
Das problem ist die Art und Weise, die Sie vergleichen _TicketChange, um festzustellen, ob es einen Wert hat. Nichts hat mehrere Bedeutungen VB.Net da es beides repräsentiert einen leeren Wert und den Typ der Referenz. Dabei Boolesche Logik mit Nichts und eine null-führt zu oft unerwartetes Verhalten.
Stattdessen _TicketChange.HasValue.
Weiter zu erklären:
Nichts zieht doppelte Aufgabe in VB.Net als die beiden die "null" - Wert für Referenztypen und der "default" Wert für value-Typen. Wenn Sie das "=" statt "Ist" oder "HasValue", Sie zwingen Sie in die Wert-Typ Rolle, und so die Nullable-Klasse wird es im Vergleich zu aktuellen gespeicherten Wert (einschließlich eine Ausnahme auslösen, wenn kein Wert gesetzt ist!). Da der default-Wert Dezimal 0 ist, ist der Vergleich an der Spitze Ihrer
Get
- accessor den Wert True ergibt.Schließlich arbeitete: