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 に答える