2010-02-15 48 views
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()應用到集合?

+0

感謝Daniel A. White和「沒有退貨,不退款」這些非常優秀的答案!不幸的是,我只能設置一個答案作爲答案。考慮到我確定收藏是否有平等比較的第一個目標,Daniel A. White的答案是最好的。對不起,退貨不退款! – 2010-02-15 20:05:03

回答

2

如何實現IComparable的,把它遞歸地爲每個項目和每個項目的財產?已經有一個定義良好的接口來比較對象。有沒有理由不想/不能使用它?

+1

老實說?無知! = P我還沒有使用過IComparable接口。我想我會留意一下。 =) – 2010-02-15 19:20:32

+1

'IComparable'在內部由字符串和數字類型用於排序。 – 2010-02-15 19:23:35

+0

感謝Daniel A. White提供此信息。我喜歡學習如何在引擎蓋下工作的信息。 – 2010-02-15 19:33:57

相關問題