我正在序列化作为我的数据实体的类列表。我有一个包含列表的 DataProvider。
我总是直接在集合中修改项目。
确定列表中的任何项目是否已更改的最佳方法是什么?我正在使用 Compact Framework。
我目前唯一的想法是在加载列表时创建列表的散列(如果可能的话)。然后,当我进行保存时,我会重新获取列表的哈希值并查看它们是否具有不同的值。如果它们不同,我保存然后更新存储的哈希以供稍后比较,如果它们相同则我不保存。
有什么想法吗?
最佳答案
如果您添加到列表中的项目实现了 INotifyPropertyChanged
接口(interface),您可以构建自己的通用列表,为您添加到列表中的所有对象 Hook 该接口(interface)中的事件,并在从列表中删除项目时取消 Hook 事件。
有一个 BindingList<T>
您可以使用框架中的类,也可以编写自己的类。
这是一个示例添加方法,假设已使用 where T: INotifyPropertyChanged
声明了类型:
public void Add(T item)
{
// null-check omitted for simplicity
item.PropertyChanged += ItemPropertyChanged;
_List.Add(item);
}
和 this[index]
索引器属性:
public T this[Int32 index]
{
get { return _List[index]; }
set {
T oldItem = _List[index];
_List[index] = value;
if (oldItem != value)
{
if (oldItem != null)
oldItem.PropertyChanged -= ItemPropertyChanged;
if (value != null)
value.PropertyChanged += ItemPropertyChanged;
}
}
}
如果您的项目不支持 INotifyPropertyChanged
,但它们是您的类(class),我会考虑添加该支持。
关于C# - 确定 List<T> 是否脏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/892020/