У меня есть куча карт в списке, и я хочу, чтобы отсортировать их по возрастанию или по убыванию:IComparer классов для пользовательского класса
private List<Card> cards = new List<Card>();
по возрастанию/по убыванию означало бы, я бы сравнить значение карт, просто.
Что мне делать? Интерфейс IComparable кажется недостаточным, поскольку он может сортировать только один «по умолчанию» способ. Поэтому я пытаюсь реализовать IComparer
, но терпеть неудачу. В этом же файле класса, как карты, я пытаюсь добавить этот класс для сравнения порядке убывания:
public class CardCompDesc : IComparer<Card> {
int IComparer.Compare(object a, object b)
// return 0, -1, or -1 later
return 0
{
}
Но уже здесь компилятор жалуется, что не может найти IComparer в текущем контексте. Если я удалю <Card>
из определения, класс компилируется. Однако, чтобы иметь возможность сортировать карты выше, что-то вроде этого: this.cards.Sort(new CardCompDesc());
похоже, что мне придется использовать IComparer <> над IComparer. Что я делаю не так?
[ 'IComparer <>'] (http://msdn.microsoft.com/ en-us/library/8ehhxeaf (v = vs.110) .aspx) находится в пространстве имен 'System.Collections.Generic'. Вы уверены, что импортировали это? –
Кроме того, подпись метода Compare неверна. Это должно быть «int Compare (Card a, Card b)», а не явная реализация интерфейса. –
Вы также можете использовать метод расширения Linq OrderBy для сортировки списка по возрастанию. Карточки = card.OrderBy (c => c.Name) .ToList(); descendingCards = cards.OrderByDescending (c => c.Name).К списку(); –