在C#中找到两个集合的补充的最快方法

Ben*_*Ben 26 .net c# linq complement set-operations

我有两个类型ICollection<MyType>称为c1和的集合c2.我想找到的一组是在项目c2中没有的c1,在争取平等的启发是Id物业MyType.

在C#(3.0)中执行此操作的最快方法是什么?

jas*_*son 38

使用Enumerable.Except并特别是接受以下的重载IEqualityComparer<MyType>:

var complement = c2.Except(c1, new MyTypeEqualityComparer());
Run Code Online (Sandbox Code Playgroud)

请注意,这会产生设置差异,因此重复c2内容只会出现在结果中IEnumerable<MyType>.在这里你需要实现IEqualityComparer<MyType>类似的东西

class MyTypeEqualityComparer : IEqualityComparer<MyType> {
    public bool Equals(MyType x, MyType y) {
        return x.Id.Equals(y.Id);
    }

    public int GetHashCode(MyType obj) {
        return obj.Id.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)