Короче говоря: у меня есть 2 коллекции объектов. Один содержит хорошие значения (назовем его «Хорошо»), другой - значения по умолчанию (г-н «По умолчанию»). Я хочу Пересечение союза между добром и невыполнением обязательств и невыполнением обязательств. Другими словами: Пересечение (Союз (Хорошо, По умолчанию), По умолчанию). Кто-то может подумать, что он разрешается как 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, как вы можете догадаться, являются значениями по умолчанию.
Хорошо: это меньший набор, содержащий в основном элементы из набора по умолчанию, но с некоторыми хорошими значениями MyString3. В нем также есть некоторые {MyString1, MyString2}, которые находятся за пределами требуемого набора.
Я хочу сделать следующее: взять только те элементы из Good, которые находятся в Default, но добавить к нему другие элементы в Default.
Вот, что я думаю, моя лучшая попытка:
HalfWantedResult = Good.Union(Default, new MyEqualityComparer());
WantedResult= HalfWantedResult.Intersect(Good, new MyEqualityComparer());
Я учил, что это должно было сработать, но результат, который я получаю, в основном состоит только из хороших пар {MyString1, MyString2}, но все из набора по умолчанию, поэтому у меня есть значение по умолчанию. Я также попытался переключить Default и Good последнего Intersect, но получил тот же результат.