有没有办法创建一个通用函数,可以将对象作为参数,也可以作为其中一个成员。所以我可以这样做:
Sort(List<inventory>, inventoryClass.count);
//Do something to display the inventory items sorted by their count member
Sort(List<inventory>, inventoryClass.price);
//Do something to display the inventory items sorted by price.
然后甚至在不同对象和不同成员的列表上使用它。
这个功能怎么样?我如何使用变量来决定我要查找哪个成员进行排序?
答案 0 :(得分:3)
构建它的一种方法是让第二个参数成为选择器函数 - Func<inventory,object>
接收有问题的对象并返回属性以进行排序。
List<inventory> Sort(List<inventory> list,
Func<inventory, object> orderBySelector)
{
return list.OrderBy(orderBySelector).ToList();
}
然后你通过传递一个匿名函数来调用它,通常是一个lamba表达式:
var listSortedByPrice = Sort(originalList, item => item.price);
var listSortedByCount = Sort(originalList, item => item.count);
当然,由于Sort
功能所做的工作量极少,您最好直接使用LINQ&#39; OrderBy
。
答案 1 :(得分:0)
您可以传递Func<TItem, TField>
。在Sort
中,您可以像这样使用它:
Sort<TItem, TField>(List<TItem> list, Func<TItem, TField> func)
{
var field = func(list[0]);
}
你打电话给这样排序:
Sort(yourList, item => item .count);