我有以下类的两个列表(ObservableCollections):
public class Data
{
public string Key { get; set; }
public string Value { get; set; }
}
一个代表旧对象 ( listA
),第二个代表更新对象 ( listB
)。我想在不破坏任何引用的情况下合并新listB
数据listA
。更准确地说,我想做以下事情:
- 从
listA
所有不存在的对象中删除listB
(对象按Key
属性进行比较) - 添加到
listA
所有listB
不存在的对象listA
- 更新两个列表中存在
Value
的所有对象的属性listA
你能提出一些有效的方法来做到这一点吗?我的解决方案很大,似乎非常无效。
更新: 当前的解决方案是:
public void MergeInstanceList(List<Instance> instances)
{
var dicOld = Instances.ToDictionary(a => a.Ip);
var dicNew = instances.ToDictionary(a => a.Ip);
var forUpdate = instances.Intersect(Instances, new Comparer()).ToList();
Instances.Where(a => !dicNew.Keys.Contains(a.Ip)).ToList().ForEach(a => Instances.Remove(a));
instances.Where(a => !dicOld.Keys.Contains(a.Ip)).ToList().ForEach(a => Instances.Add(a));
forUpdate.ForEach(a => dicOld[a.Ip].Name = a.Name);
}
public class Comparer : IEqualityComparer<Instance>
{
public bool Equals(Instance x, Instance y)
{
return x.Ip == y.Ip;
}
public int GetHashCode(Instance obj)
{
return obj.Ip.GetHashCode();
}
}