Generic List and IComparable Sorting Error: Can not convert lambda expression

Generic List and IComparable Sorting Error: Can not convert lambda expression

我已经实现了自己的 GenericList 和任务 类 例如:

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;}
}

here I am getting the Error Warning by Visual Studio IDE Error: Can not convert lambda expression to 'System.Collections.Generic.IComparer' because it is not a delegate type

我什至尝试使用 Compare.Create 方法在 Sort() 方法中实现以下内容:

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

但我仍然收到错误。

我在 GenericList 中实现排序时尝试根据任务的 ID 对任务进行排序。有人可以帮助我如何实现这一目标吗?

感谢任何帮助。提前谢谢你。

首先,不要将 Sort() 结果分配给变量,因为它是 in-place sorting。 并将您的代码更改为

list.Sort((a, b) => b.Id.CompareTo(a.Id)); // sort and keep sorted list in list itself

尝试使用 lambda 按 属性 进行排序。无需使用

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

在 OrderBy() 中,您可以只提及您想要订购的 属性(双关语意)。在你的 class 任务中,你已经提到 属性 Id 是 int,所以你可以使用那个 属性 来比较。

尝试这样的事情:

....
list = list.OrderBy(x => x.Id).ToList();
....