Quelle est la meilleure approche pour comparer une collection avec un autre (architecturalement parlant)?

StackOverflow https://stackoverflow.com/questions/2268322

Question

Voici un exemple de l'approche de l'architecture I comme pour l'instant Favorited premier:

public abstract class CollectionComparer {
    public virtual SetEqual(IEnumerable enum1, IEnumerable enum2) {
        if(enum1== null && enum2== null)
            return true;

        if(enum1== null && !(enum2== null))
            return false;

        if(!(enum1== null) && enum2== null)
            return false;

        if(enum1.GetType().DeclaringType != enum2.GetType().DeclaringType)
            return false;

        var col1 = (from e in enum1 select e).ToList()
        var col2 = (from e in enum2 select e).ToList()

        if(col1.Count != col2.Count)
            return false;           

        foreach (element in col1)
            if(!col2.Contains(element))
                return false;

        foreach (element in col2)
            if(!col1.Contains(element))
                return false;

        return true; 
    }
}

public interface IProduct {
    ...
}

public interface IOrder {
    ...
    ICustomer Customer { get; }
    ICollection<IProduct> Products { get; }
}

public interface ICustomer {
    ...
    ICollection<IOrder> Orders { get; }
}

public internal Order : CollectionComparer, IOrder {
    #region IOrder interface implementation
    ...
    #endregion
}

public internal Customer : CollectionComparer, ICustomer {
    #region ICustomer interface implementation
    ...
    #endregion
}

Est-ce que cette approche de classe abstraite CollectionComparer être considérée comme une bonne pratique pour la comparaison de collecte pour un équivalent à Object.equals () appliquée à une collection?

Était-ce utile?

La solution

Autres conseils

Que diriez-vous la mise en œuvre IComparable et de l'appeler récursive pour chaque élément et chaque propriété d'élément? Il y a déjà une interface bien définie pour comparer des objets. Y at-il une raison quelconque vous ne voulez pas / ne peut pas l'utiliser?

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