当用户决定打开或保存时,我有一个与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)
有没有更好的方法来跟踪类实例的更改?例如,是否有一些标准方法可以将类的实例"哈希"为一个值,我可以用它来比较最新版本和保存的版本,而不会破坏类中的每个属性?
您可以将属性部分减少为单行:
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)