Нет необходимости во всей сложной логике. Если x
и y
оба обнуляются с одним и тем же базовым типом, тогда x
равняется y
тогда и только тогда, когда
x.HasValue
- это true
y.HasValue
является true
x.Value
равно y.Value
или
x.HasValue
- это false
y.HasValue
- это false
Ни в одном из этих случаев мы не хотим выдавать уведомление об изменении свойства, и поэтому будет достаточно простого теста на неравенство. Таким образом:
Private _WorkPhone As Long?
Public Property [WorkPhone]() As Long?
Get
Return _WorkPhone
End Get
Set(ByVal value As Long?)
If Not _workPhone.Equals(value)
MyBase.RaisePropertyChanging("WorkPhone")
_WorkPhone = value
MyBase.MarkDirty()
MyBase.RaisePropertyChanged("WorkPhone")
EndIf
End Set
End Property
Обратите внимание, что нам нужно использовать Not Nullable(Of T).Equals
вместо <>
, так как последний оценивается как Nothing
, если один, если его операнды Nothing
.