Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较2个强类型列表的通用方法_C#_.net_Linq_Generics_Compare - Fatal编程技术网

C# 比较2个强类型列表的通用方法

C# 比较2个强类型列表的通用方法,c#,.net,linq,generics,compare,C#,.net,Linq,Generics,Compare,我有以下方法比较两个列表(相同类型)并返回差异。如何使此方法接受任何类型的列表 var differences = list1.Where(x => list2.All(x1 => x1.Name != x.Name)) .Union(list2.Where(x => list1.All(x1 => x1.Name != x.Name))); 要获取两个集合(具有顺序独立性和多重独立性)之间的差异,可以使用: 使用自定义比较器: public c

我有以下方法比较两个列表(相同类型)并返回差异。如何使此方法接受任何类型的列表

var differences = list1.Where(x => list2.All(x1 => x1.Name != x.Name))
            .Union(list2.Where(x => list1.All(x1 => x1.Name != x.Name)));

要获取两个集合(具有顺序独立性和多重独立性)之间的差异,可以使用:

使用自定义比较器:

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

    public int GetHashCode(MyType obj)
    {
        return obj.Name == null ? 0 : obj.Name.GetHashCode();
    }
}
公共类MyComparer:IEqualityComparer
{
公共布尔等于(MyType x,MyType y)
{
返回x.Name.Equals(y.Name);
}
public int GetHashCode(MyType obj)
{
返回obj.Name==null?0:obj.Name.GetHashCode();
}
}
这个怎么办:

var differences = list1.Except(list2).Union(list2.Except(list1));
看见
public class MyComparer : IEqualityComparer<MyType>
{
    public bool Equals(MyType x, MyType y)
    {
        return x.Name.Equals(y.Name);
    }

    public int GetHashCode(MyType obj)
    {
        return obj.Name == null ? 0 : obj.Name.GetHashCode();
    }
}
var differences = list1.Except(list2).Union(list2.Except(list1));