Interseca con un IEqualityComparer personalizado usando Linq
Larga historia corta: tengo 2 colecciones de objetos. Uno contiene buenos valores (Llamémoslo "Bueno"), los otros valores predeterminados (Sr. "Predeterminado"). Quiero la Intersección de la Unión entre Bueno y Predeterminado, y Predeterminado. En otras palabras: Intersecar (Unión (Bueno, Predeterminado), Predeterminado). Uno podría pensar que se resuelve como Predeterminado, pero aquí es donde se vuelve complicado: uso un IEqualityComparer personalizado.
Tengo las siguientes clases:
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();
}
}
Estas son las características de mis colecciones Colecciones buenas y predeterminadas:
Valor predeterminado: es un conjunto grande, que contiene todos los pares deseados de {MyString1, MyString2}, pero los valores de MyString3 son, como puede suponer, valores predeterminados.
Bueno: es un conjunto más pequeño, que contiene principalmente elementos que están en el conjunto predeterminado, pero con algunos buenos valores de MyString3. También tiene algunos {MyString1, MyString2} que están fuera del conjunto deseado.
Lo que quiero hacer es esto: tome solo los elementos de Bueno que están en Predeterminado, pero agregue los otros elementos en Predeterminado a eso.
Aquí está, lo que creo que es, mi mejor intento:
HalfWantedResult = Good.Union(Default, new MyEqualityComparer());
WantedResult= HalfWantedResult.Intersect(Good, new MyEqualityComparer());
Enseñé que debería haber funcionado, pero el resultado que obtengo es básicamente solo el buen conjunto de pares {MyString1, MyString2}, pero todos provienen del conjunto Predeterminado, por lo que tengo el valor predeterminado. También intenté cambiar el valor predeterminado y bueno de la última intersección, pero obtengo el mismo resultado.