如何比较两个`List <MyObject1>和List <MyObject2>`?

Dev*_*per 4 .net c# linq list

如何比较两个 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)

Căl*_*rie 7

这个SO问题的接受答案建议使用Enumerable.SequenceEqual,记录在这里.

该方法需要两个IEnumerables和一个IEqualityComparer.它并行迭代您的两个可枚举项,并使用您提供的比较器逐个元素地检查相等性.

在IEqualityComparer实现中,您可能希望通过Id属性比较MyObject实例.

如果确实有两种对象类型,您可以执行类似操作MyList1.Select(new MyObject2 {/*mapping goes here*/})或尝试使用AutoMapper


Roy*_*mir 2

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)