如何比较两个`名单,其中,MyObject1>与列表< MyObject2>`?名单、两个、列表、GT

2023-09-04 22:57:54 作者:去你妹的虚情假意

如何比较两个名单,其中,MyObject1> 名单,其中,MyObject2> ? 所以,如果一个值具有不同值时,它应该可以检查它。

(我知道我们可以使用的foreach ...但我想 LINQ 解决方案/)

感谢您!

 公共密封类MyObject1
{
    公共字符串名称{;组; }

    公共字符串值{设置;得到; }

    公众的Guid ID {获得;组; }
}

公共密封类MyObject2
{
    公共字符串名称{;组; }

    公共字符串值{设置;得到; }

    公众的Guid ID {获得;组; }
}
 

解决方案

 公共类myComparer:的IEqualityComparer
{
   大众新布尔等于(对象x,对象Y)
   {
      如果(x为字符串)
         返回X ==ÿ;
      否则,如果(x是GUID)//也许你想他们是平等的,当最后一个字符是相等的。所以你可以在这里做到这一点。
         返回X ==ÿ;
      其他
         返回EqualityComparer&其中;对象> .Default.Equals(X,Y);
   }

   公众诠释GetHash code(obj对象)
   {
      返回EqualityComparer<对象> .Default.GetHash code(OBJ);
   }
}
 
科前生物下周上市 募资17亿 工程院院士陈焕春为董事长

现在

 名单,其中,MyObject1> LST1 =新MyObject1< MyObject1>();
//这里添加项目...

名单< MyObject2> LST2 =新MyObject1< MyObject2>();
//这里添加项目...
 

您可以等于2种方式:

  IStructuralEquatable当量= LST1;

  Console.WriteLine(equ.Equals(LST2,EqualityComparer<对象> .DEFAULT));

   要么

   Console.WriteLine(equ.Equals(LST2,新myComparer()));
 

How to compare two List<MyObject1> with List<MyObject2>? So if one the Value has different value it should be possible to check it.

(I know we can use foreach... But I'd like LINQ solution/)

Thank you!

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; }
}

解决方案

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);
   }
}

now

List<MyObject1 > lst1 = new MyObject1 <MyObject1 >(); 
//add items here...

List<MyObject2 > lst2 = new MyObject1 <MyObject2 >(); 
//add items here...

you can equate 2 ways :

IStructuralEquatable equ = lst1 ;

  Console.WriteLine(equ.Equals(lst2 , EqualityComparer<object>.Default));

   or

   Console.WriteLine(equ.Equals(lst2 , new myComparer()));