Проблемы с сортировкой и IComparable - PullRequest
2 голосов
/ 05 октября 2009

Я пытаюсь отсортировать 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 ]

9 голосов
/ 05 октября 2009

Вы реализовали IComparable<T>, а не IComparable. Это разные интерфейсы. Если вы собираетесь использовать дженерики, просто начните с List<T>. Я имею в виду, что вы могли бы также реализовать IComparable, но я бы просто отошел от несколько устаревших неуниверсальных коллекций на вашем месте.

3 голосов
/ 05 октября 2009

Можете ли вы использовать LINQ в своем проекте? Если это так, и если вам нужна только сортировка по свойству, вам не нужно реализовывать IComparable. Вы можете просто сделать:

theAssetsList.OrderBy(asset => asset.AssetId);
0 голосов
/ 11 июня 2013

Вы также можете попробовать .. list = новый список (list.OrderBy (x => x.Text));

...