2010-08-19 104 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方法,第一个方法很可能是主要的罪魁祸首。

相关问题