排序和IComparable的问题

时间:2009-10-05 16:44:44

标签: c# icomparable

我正在尝试对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;
            }
        }

此代码构建得很好。还有一件事需要记住,我怀疑这可能是问题,虽然我不明白,上面的类是一个内部类。如果那就是绊倒我的话,你会怎么去比较一个内部阶级?

3 个答案:

答案 0 :(得分:9)

您已实施IComparable<T>,而不是IComparable。它们是不同的接口。如果您要使用泛型,只需使用List<T>即可。我的意思是你可以也实现IComparable,但如果我是你的话,我只会放弃有些过时的非通用集合。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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