djd*_*d87 4 c# hash compact-framework generic-list c#-2.0
我正在序列化作为我的数据实体的类的列表.我有一个包含List的DataProvider.
我总是直接修改集合中的项目.
确定列表中的任何项目是否已更改的最佳方法是什么?我正在使用Compact Framework.
我当前唯一的想法是在加载列表时创建List的哈希值(如果可能的话).然后,当我进行保存时,我重新获取列表的哈希值,看看它们是否是不同的值.如果它们不同,我保存然后更新存储的Hash以便稍后进行比较,如果它们是相同的则我不保存.
有任何想法吗?
如果添加到列表中的项目实现了INotifyPropertyChanged接口,则可以构建自己的通用列表,该列表将该事件挂接到您添加到列表中的所有对象的该接口中,并在从列表中删除项目时取消挂起事件.
BindingList<T>您可以使用框架中的类,或者您可以编写自己的类.
这是一个示例add方法,假设已声明类型where T: INotifyPropertyChanged:
public void Add(T item)
{
// null-check omitted for simplicity
item.PropertyChanged += ItemPropertyChanged;
_List.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
和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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的项目不支持INotifyPropertyChanged,但它们是您的课程,我会考虑添加该支持.
| 归档时间: |
|
| 查看次数: |
7421 次 |
| 最近记录: |