我想以这种方式将集合(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 的两个实体的其他数据可能不同)。更新的代码示例。