长话短说:我有两个对象集合。一个包含好的值(我们称之为“好的”),另一个包含默认值(Mr.“默认”)。我想要求Good和Default的联合交集,以及Default本身的交集。换句话说:Intersect(Union(Good,Default),Default)。你可能认为结果是Default,但问题在于我使用了自定义的IEqualityComparer。
我有以下类:
class MyClass
{
public string MyString1;
public string MyString2;
public string MyString3;
}
class MyEqualityComparer : IEqualityComparer<MyClass>
{
public bool Equals(MyClass item1, MyClass item2)
{
if(item1 == null && item2 == null)
return true;
else if((item1 != null && item2 == null) ||
(item1 == null && item2 != null))
return false;
return item1.MyString1.Equals(item2.MyString1) &&
item1.MyString2.Equals(item2.MyString2);
}
public int GetHashCode(MyClass item)
{
return new { item.MyString1, item.MyString2 }.GetHashCode();
}
}
这是我收集的Good和Default集合的特点:
Default:一个包含所有想要的{ MyString1,MyString2 }对的大型集合,但是正如你所猜测的那样,MyString3值是默认值。
Good:一个较小的集合,主要包含在Default集合中的项目,但具有一些良好的MyString3值。它还包含一些不在所需集合中的{ MyString1,MyString2 }。
我想做的是:仅使用Default中存在的Good项,但将其他Default项目添加到其中。
以下是我认为是最好的尝试:
HalfWantedResult = Good.Union(Default, new MyEqualityComparer());
WantedResult= HalfWantedResult.Intersect(Good, new MyEqualityComparer());
我以为它应该可以工作,但我得到的结果基本上只有来自默认集合的好 {MyString1,MyString2} 对组成,所以我在所有地方都有默认值。我还尝试了交换最后一个 Intersect 的 Default 和 Good,但是我得到了相同的结果。
new { item.MyString1, item.MyString2 }
),但调用Equals呢? - Jon Skeet