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