2

我正在尝试对ArrayList自定义项进行排序并获得“至少一个对象必须实现 IComparable”。尽管已经IComparable为他们实现了接口。我只是调用默认的Sort()无参数或任何东西。我要排序的对象的定义如下:

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;
            }
        }

这段代码构建得很好。还有一件事要记住,我怀疑这可能是问题所在,虽然我不明白,上面的类是一个内部类。如果这就是让我绊倒的原因,您将如何比较内部类?

4

3 回答 3

9

你已经实现了IComparable<T>,没有IComparable。它们是不同的接口。如果您要使用泛型,只需使用List<T>开始。我的意思是你可以实现IComparable,但如果我是你的话,我会远离有些过时的非泛型集合。

于 2009-10-05T16:47:15.013 回答
3

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

theAssetsList.OrderBy(asset => asset.AssetId);
于 2009-10-05T16:51:55.440 回答
0

你也可以试试.. list= new List(list.OrderBy(x => x.Text));

于 2013-06-11T11:10:55.310 回答