1

这是我目前最喜欢的架构方法的示例:

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
}

这种 CollectionComparer 抽象类方法是否被认为是对应用于集合的 object.Equals() 等效项进行集合比较的良好实践?

4

2 回答 2

4

你见过这个吗:SequenceEqual

http://msdn.microsoft.com/en-us/library/bb348567.aspx

于 2010-02-15T19:14:52.953 回答
2

如何实现 IComparable 并为每个项目和每个项目属性递归调用它?已经有一个定义明确的接口来比较对象。有什么原因你不想/不能使用它吗?

于 2010-02-15T19:15:05.640 回答