2010-08-19 85 views
0

我設計了一個類,它基本上只是一個存儲大量數據屬性的對象。我已經在課堂上實現了IComparable。類的對象被實例化並存儲在List中。在C#中對IComparable對象進行排序

有複雜的在對象的某些字段添加的電平確定哪些字段我排序(有一個層次)的層次結構是這樣的:

  • 1)名稱(在實例中定義)
  • 在實例化(定義)
  • 3)網絡組
  • 2)產品(定義 -實例化後,初始 創建列表後,我回來迭代通過 ,執行計算,和 設置組。)
  • 4)日期(在實例中定義)

有幾種標誌(布爾字段),其確定兩個以上的在排序層次結構被使用。

  • 5)AllowProductGroupingInd(在實例化)
  • 6)AllowDateGroupingInd(在 實例定義)

排序的相對小的名單上的性能(N = 1000)中所定義 差一般約500毫秒。

我不確定我是否正確實施了比較器。 我的方法是這樣的:

public int CompareTo(Exposure rfpe) 
      { 
       if (Name.CompareTo(rfpe.Name) != 0) 
        return Name.CompareTo(rfpe.Name); 
       else 
       { 
        if (AllowProductGroupingInd == false) 
        { 
         if (ProductId.CompareTo(rfpe.ProductId) != 0) 
          return ProductId.CompareTo(rfpe.ProductId); 
        } 

        if (NetGroup.CompareTo(rfpe.NetGroup) != 0) 
         return NetGroup.CompareTo(rfpe.NetGroup); 
        else if (AllowDateGroupingInd == false) 
        { 
         if (Date.CompareTo(rfpe.Date) != 0) 
          return Date.CompareTo(rfpe.Date); 
         else 
          return 0; 
        } 

        return 0; 
       } 

      } 

我使用C#3.0,所以我不能使用LINQ。這是我想完成什麼的合理實施?有沒有更優雅的解決方案?在我看來,我可能會使用太多的條件,但我不確定如何解決這個問題。

回答

0

你似乎是雙重調用每個子公司CompareTo方法,第一個方法很可能是主要的罪魁禍首。