Проблемы с сортировкой и 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));

Другие вопросы по тегам