如何比较两个名单,其中,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);
}
}
现在
名单,其中,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()));