我想按照此处的说明进行操作: Sorting a list using Lambda/Linq to objects
即:
public enum SortDirection { Ascending, Descending }
public void Sort<TKey>(ref List<Employee> list,
Func<Employee, TKey> sorter, SortDirection direction)
{
if (direction == SortDirection.Ascending)
list = list.OrderBy(sorter);
else
list = list.OrderByDescending(sorter);
}
打电话给他,他说:
排序(参考员工,e =&gt; e.DOB,SortDirection.Descending);
但是我不明白TKey所指的是什么,正如我在电话中看到的那样,它错过了通用的TKey。
你能解释一下TKey是什么以及如何使用它吗?
我想我可以为方法使用另一个名称,没有必要排序,对吗?
谢谢!
答案 0 :(得分:3)
您按类型TKey
键排序,并且必须实现IComparable<TKey>
。例如:
// key: Firstname
// TKey: string (which is IComparable<String>
list.OrderBy(person => person.Firstname);
上面的代码按名字排序,这是您使用sorter
定义的内容。是的,你可以给你的方法任何你喜欢的名字。它不必命名为Sort
。
改善建议(与问题间接相关)
而不是更改list
并将其作为参考传递,我建议您考虑以下实现:
public IOrderedEnumerable<Employee> Sort<TKey>(IEnumerable<Employee> list, Func<Employee, TKey> sorter, SortDirection direction);
{
IOrderedEnumerable<Employee> result;
if (direction == SortDirection.Ascending)
result = list.OrderBy(sorter);
else
result = list.OrderByDescending(sorter);
return result;
}
然后,您可以返回{em>新的有序可枚举的Employee
个对象,而不是更改旧的对象并使用任何可枚举的而不是List
个对象只要。这为您提供了更大的灵活性,并且更接近人们习惯习惯的LINQ实现。