Проблемы с сортировкой и 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 ответа
Вы реализовали IComparable<T>
не IComparable
, Это разные интерфейсы. Если вы собираетесь использовать дженерики, просто используйте List<T>
начать с. Я имею в виду, вы могли бы также реализовать IComparable
, но я бы просто отошел от несколько устаревших неуниверсальных коллекций на вашем месте.
Можете ли вы использовать LINQ в своем проекте? Если это так, и если все, что вам нужно, это сортировка по свойству, вам не нужно реализовывать IComparable. Вы могли бы просто сделать:
theAssetsList.OrderBy(asset => asset.AssetId);
Вы также можете попробовать.. list= new List(list.OrderBy(x => x.Text));