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();
....
我已经实现了自己的 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();
....