Question

Je veux simplement supprimer les doublons de deux listes et les combiner en une seule liste. Je dois également être en mesure de définir ce qu'est un double. Je définis un double par la propriété ColumnIndex, s'ils sont les mêmes, ce sont des doublons. Voici l'approche que j'ai adoptée:

J'ai trouvé un exemple astucieux de la façon d'écrire des comparateurs en ligne pour les occasions aléatoires où vous n'en avez besoin qu'une seule fois dans un segment de code.

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);
    }
}

Ensuite, j'ai juste mes deux listes et je tente un syndicat avec le comparateur.

            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);

L'ensemble de résultats est cependant nul.

Où vais-je égarer? J'ai déjà confirmé que les deux listes ont des colonnes avec des propriétés ColumnIndex égales.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top