如何比较两个 List<MyObject1>用List<MyObject2>?因此,如果Value具有不同的值,则应该可以检查它.
(我知道我们可以使用foreach......但是我想要LINQ解决方案/)
谢谢!
public sealed class MyObject1
{
public string Name { get; set; }
public string Value { set; get; }
public Guid ID { get; set; }
}
public sealed class MyObject2
{
public string Name { get; set; }
public string Value { set; get; }
public Guid ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这个SO问题的接受答案建议使用Enumerable.SequenceEqual,记录在这里.
该方法需要两个IEnumerables和一个IEqualityComparer.它并行迭代您的两个可枚举项,并使用您提供的比较器逐个元素地检查相等性.
在IEqualityComparer实现中,您可能希望通过Id属性比较MyObject实例.
如果确实有两种对象类型,您可以执行类似操作MyList1.Select(new MyObject2 {/*mapping goes here*/})或尝试使用AutoMapper
public class myComparer: IEqualityComparer
{
public new bool Equals(object x, object y)
{
if (x is string )
return x == y;
else if (x is Guid ) // maybe you want them to be equal if last char is equal. so you can do it here.
return x == y;
else
return EqualityComparer<object>.Default.Equals(x, y);
}
public int GetHashCode(object obj)
{
return EqualityComparer<object>.Default.GetHashCode(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
现在
List<MyObject1 > lst1 = new MyObject1 <MyObject1 >();
//add items here...
List<MyObject2 > lst2 = new MyObject1 <MyObject2 >();
//add items here...
Run Code Online (Sandbox Code Playgroud)
你可以用两种方法来等同:
IStructuralEquatable equ = lst1 ;
Console.WriteLine(equ.Equals(lst2 , EqualityComparer<object>.Default));
or
Console.WriteLine(equ.Equals(lst2 , new myComparer()));
Run Code Online (Sandbox Code Playgroud)