Utilizzo di IEqualityComparer per l'Unione
-
12-11-2019 - |
Domanda
Voglio semplicemente rimuovere i duplicati da due elenchi e combinarli in un elenco. Devo anche essere in grado di definire cos'è un duplicato. Definisco un duplicato della proprietà colonnaria, se sono uguali, sono duplicati. Ecco l'approccio che ho adottato:
Ho trovato un elegante esempio di come scrivere paragoni in linea per le occasioni casuali in cui è necessario esso solo una volta in un segmento di codice.
public class InlineComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, T, bool> getEquals;
private readonly Func<T, int> getHashCode;
public InlineComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
{
getEquals = equals;
getHashCode = hashCode;
}
public bool Equals(T x, T y)
{
return getEquals(x, y);
}
public int GetHashCode(T obj)
{
return getHashCode(obj);
}
}
Poi ho solo le mie due liste e provo un'unione su di loro con il confronto.
var formatIssues = issues.Where(i => i.IsFormatError == true);
var groupIssues = issues.Where(i => i.IsGroupError == true);
var dupComparer = new InlineComparer<Issue>((i1, i2) => i1.ColumnInfo.ColumnIndex == i2.ColumnInfo.ColumnIndex,
i => i.ColumnInfo.ColumnIndex);
var filteredIssues = groupIssues.Union(formatIssues, dupComparer);
Il set di risultati tuttavia è nullo.
Dove sto andando fuori strada? Ho già confermato che i due elenchi hanno colonne con proprietà uguali colonnelli.
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow