2009-10-05 69 views
2

我想排序ArrayList的自定义项目,并得到'至少有一个对象必须实现IComparable。'尽管为他们实施了IComparable接口。我只是打电话给默认Sort()没有参数或任何东西。我想要分类的对象的定义如下:排序和IComparable的问题

class AssetItem : System.IComparable<AssetItem> 
{ 
     public string AssetName { get; set; } 
     public int AssetID { get; set; } 

     public int CompareTo(AssetItem item) 
     { 
      if (null == item) 
      { 
       return 1; 
      } 
      else if (this.AssetID < item.AssetID) 
      { 
       return -1; 
      } 
      else if (this.AssetID == item.AssetID) 
      { 
       return this.AssetName.CompareTo(item.AssetName); 
      } 
      else 
      { 
       return 1; 
      } 
     } 

此代码构建得很好。还有一件事要牢记,我怀疑这可能是问题,尽管我不明白,上面的班级是一个内部班级。如果那是让我沮丧的事情,你会如何去比较内心阶层?

回答

9

您已实施IComparable<T>而不是IComparable。他们是不同的界面。如果您打算使用泛型,请使用List<T>开始。我的意思是你可能也实现IComparable,但我只是从有些过时的非专利集合,如果我是你。

+0

Doh,那是一个nobrainer。感谢您的帮助! – Trajanus 2009-10-05 17:12:00

+0

我有同样的问题,谢谢!这让我怀疑,为什么不能从IComparable继承IComparable ? – jrummell 2009-11-23 16:38:08

+1

@ jrummell:这会迫使它试图将自己与* any *对象进行比较,而不仅仅是正确类型的对象,这有点痛苦。 – 2009-11-23 17:00:47

3

你可以在你的项目中使用LINQ吗?如果是这样,并且如果您只需要按属性排序,则不需要实现IComparable。你可以只是做:

theAssetsList.OrderBy(asset => asset.AssetId); 
0

您也可以尝试.. 名单=新名单(list.OrderBy(X => x.Text));