我想以这种方式将集合(C1)的内容与另一个集合(C2)同步:
- 如果特定项目出现在 C1 中,而在 C2 中不存在,则必须从 C1 中删除;
- 如果特定项目出现在 C2 中,而在 C1 中不存在,则必须将其添加到 C1 中;
- 如果特定项目同时出现在 C1 和 C2 中,则必须将其留在 C1 中。
同步后 C1 中的项目顺序无关紧要。
我写的实现是这样的:
public static void Synchronize<T>(this ICollection<T> first, ICollection<T> second, IEqualityComparer<T> comparer)
{
// delete items, which present in first, but absent in second
foreach (var item in first.Except(second, comparer).ToArray())
{
first.Remove(item);
}
// add items, which present in second, but absent in first
foreach (var item in second.Except(first, comparer).ToArray())
{
first.Add(item);
}
}
我想知道,有没有更优雅或标准的方式?
更新。
对不起,一些澄清。
C1 不必是 C2 的副本,因为T
它将是从数据库加载的某个实体,我将通过标识符测试相等性(具有相同 id 的两个实体的其他数据可能不同)。更新的代码示例。