gpt4 book ai didi

c# - 对对象实现更改跟踪的最佳方法是什么

转载 作者:IT王子 更新时间:2023-10-29 04:00:57 25 4
gpt4 key购买 nike

我有一个包含 5 个属性的类。

如果将任何值分配给这些字段中的任何一个,则另一个值(例如 IsDIrty)将更改为 true。

public class Class1
{
bool IsDIrty {get;set;}

string Prop1 {get;set;}
string Prop2 {get;set;}
string Prop3 {get;set;}
string Prop4 {get;set;}
string Prop5 {get;set;}
}

最佳答案

要做到这一点,您不能真正使用自动 getter 和 setter,您需要在每个 setter 中设置 IsDirty。

我通常有一个“setProperty”通用方法,它接受一个 ref 参数、属性名称和新值。我在 setter 中调用它,允许我可以设置 isDirty 并引发更改通知事件的单点,例如

protected bool SetProperty<T>(string name, ref T oldValue, T newValue) where T : System.IComparable<T>
{
if (oldValue == null || oldValue.CompareTo(newValue) != 0)
{
oldValue = newValue;
PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(name));
isDirty = true;
return true;
}
return false;
}
// For nullable types
protected void SetProperty<T>(string name, ref Nullable<T> oldValue, Nullable<T> newValue) where T : struct, System.IComparable<T>
{
if (oldValue.HasValue != newValue.HasValue || (newValue.HasValue && oldValue.Value.CompareTo(newValue.Value) != 0))
{
oldValue = newValue;
PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(name));
}
}

关于c# - 对对象实现更改跟踪的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com