Ошибка универсального списка и сортировки IComparable: не удается преобразовать лямбда-выражение

2

Я реализовал свои собственные классы GenericList и Task, такие как:

public GenericList<T> where T: Task
{
  public List<T> list = new List<T>();
  ....
  public void Sort()
  {
   list = list.Sort((a,b) => b.Id.CompareTo(a.Id) > 0);
   //here I am getting the Error Warning by Visual Studio IDE
   //Error: Can not convert lambda expression to
   //'System.Collections.Generic.IComparer<T>' because it is not a delegate type
  }
}

public class Task
{
  public int Id {get; set;}
  public Task(int ID)
  {Id = ID;}
}

здесь я получаю предупреждение об ошибке с помощью ошибки Visual Studio IDE: невозможно преобразовать лямбда-выражение в 'System.Collections.Generic.IComparer', потому что это не тип делегата

Я даже попытался реализовать следующее в методе Sort(), используя метод Compare.Create:

list = list.OrderBy(x => x.Id,
            Comparer<Task>.Create((x, y) => x.Id > y.Id ? 1 : x.Id < y.Id ? -1 : 0));
//Here the Error: the type argument for the method can not be inferred

Но я все еще получаю ошибку.

Я пытаюсь сортировать задачи на основе их идентификаторов в моей реализации Sort в GenericList. Может ли кто-нибудь помочь мне, как я смогу добиться этого?

Любая помощь приветствуется. Заранее спасибо.

Теги:
sorting
lambda
icomparable

2 ответа

2
Лучший ответ

Попробуйте заказать только по собственности, используя лямбда. Нет необходимости использовать

OrderBy (<TSource>, Func <TSource, TKey>)

В OrderBy() вы можете просто указать свойство, которое вы хотите заказать (каламбур). В вашей задаче класса вы уже упоминали идентификатор свойства как int, поэтому вы можете просто использовать это свойство для сравнения.

Попробуйте что-то вроде этого:

....
list = list.OrderBy(x => x.Id).ToList();
....
  • 0
    Спасибо за помощь. Это сработало отлично.
3

Прежде всего, не присваивайте результат Sort() переменной как ее in-place sorting. И измените свой код на

list.Sort((a, b) => b.Id.CompareTo(a.Id)); // sort and keep sorted list in list itself
  • 0
    Я очень ценю ваш ответ и помощь. Но это также дает ошибку: не может неявно преобразовать тип void в System.Collections.Generic.List <T>.
  • 2
    Метод List.sort возвращает void. Так что, я полагаю, вы присваиваете переменную list.sort, вам не следует ее присваивать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню