Я реализовал свои собственные классы 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. Может ли кто-нибудь помочь мне, как я смогу добиться этого?
Любая помощь приветствуется. Заранее спасибо.
Попробуйте заказать только по собственности, используя лямбда. Нет необходимости использовать
OrderBy (<TSource>, Func <TSource, TKey>)
В OrderBy() вы можете просто указать свойство, которое вы хотите заказать (каламбур). В вашей задаче класса вы уже упоминали идентификатор свойства как int, поэтому вы можете просто использовать это свойство для сравнения.
Попробуйте что-то вроде этого:
....
list = list.OrderBy(x => x.Id).ToList();
....
Прежде всего, не присваивайте результат Sort()
переменной как ее in-place sorting
. И измените свой код на
list.Sort((a, b) => b.Id.CompareTo(a.Id)); // sort and keep sorted list in list itself