我正在尝试对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;
}
}
此代码构建得很好。还有一件事需要记住,我怀疑这可能是问题,虽然我不明白,上面的类是一个内部类。如果那就是绊倒我的话,你会怎么去比较一个内部阶级?
答案 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));