Vb.net 正在寻找一种更优雅的方法来检查是否更改了可为null的属性

Vb.net 正在寻找一种更优雅的方法来检查是否更改了可为null的属性,vb.net,Vb.net,如果我有许多类型为SqlDate或Date?的属性,那么这种检查属性是否更改的方法可能是单调的 您将如何执行此检查?可能作为SqlDate类型的扩展方法?还是有更普遍的方法 Public Property StayDate() As SqlDateTime Get Return _StayDate End Get Set(ByVal value As SqlDateTime) If (value.IsNull And Not _StayDa

如果我有许多类型为SqlDate或Date?的属性,那么这种检查属性是否更改的方法可能是单调的

您将如何执行此检查?可能作为SqlDate类型的扩展方法?还是有更普遍的方法

Public Property StayDate() As SqlDateTime
    Get
        Return _StayDate
    End Get
    Set(ByVal value As SqlDateTime)
        If (value.IsNull And Not _StayDate.IsNull) OrElse
           (Not value.IsNull And _StayDate.IsNull) OrElse
           (value <> _StayDate) Then
            _Changed = True
        End If
        _StayDate = value
    End Set
End Property

为什么不简单地使用_Changed=value!=_静水?SqlDateTime实现所有比较运算符。在SQL中,将任何值与null进行比较都会产生null。看起来C#对象也是这样做的。我刚重新测试过。更改日期在哪里:数据库还是应用程序?如果是您的应用程序,则从SQLDateTime继承,并使用实际值更改时引发的事件对其进行扩展。将新的SQLDateTime类型替换为包含的类型应该非常容易。
public SqlDateTime StayDate {
    get { return _StayDate; }
    set {
        if ((value.IsNull   & !_StayDate.IsNull) || 
                 (!value.IsNull & _StayDate.IsNull)  || 
                 (value != _StayDate)) 
        {
            _Changed = true;
        }
        _StayDate = value;
    }
}