跟踪已更改(未保存)的对象

Eri*_*tas 4 c# properties

当用户决定打开或保存时,我有一个与XML文件序列化的类.我正在尝试添加典型功能,当他们尝试使用未保存的更改关闭表单时,表单会警告他们并在关闭之前为他们提供保存选项.

我已经HasUnsavedChanges为我的班级添加了一个属性,我的表格会在关闭前检查.但是,我的属性已经从这样的事情发生了变化,这有点令人讨厌.

public string Name
{
    get;
   set;
}
Run Code Online (Sandbox Code Playgroud)

对...

private string _Name;
public string Name
{
    get
    {
         return _Name;
    }
   set
   {
        this._Name = value;
        this.HasUnsavedChanges = true;
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来跟踪类实例的更改?例如,是否有一些标准方法可以将类的实例"哈希"为一个值,我可以用它来比较最新版本和保存的版本,而不会破坏类中的每个属性?

Bry*_*tts 6

您可以将属性部分减少为单行:

private int _foo;

public int Foo
{
    get { return _foo; }
    set { SetProperty(ref _foo, value); }
}
Run Code Online (Sandbox Code Playgroud)

将其添加到您的基类:

private bool _modified;

protected void SetProperty<TValue>(
    ref TValue member,
    TValue newValue,
    IEqualityComparer<TValue> equalityComparer)
{
    var changed = !equalityComparer.Equals(member, newValue);

    if(changed)
    {
        member = newValue;

        _modified = true;
    }
}

protected void SetProperty<TValue>(ref TValue member, TValue newValue)
{
    SetProperty(ref member, newValue, EqualityComparer<TValue>.Default);
}
Run Code Online (Sandbox Code Playgroud)