将对象和成员名称作为参数的通用函数?

时间:2014-06-28 04:35:57

标签: c# function class object generics

有没有办法创建一个通用函数,可以将对象作为参数,也可以作为其中一个成员。所以我可以这样做:

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.

然后甚至在不同对象和不同成员的列表上使用它。

这个功能怎么样?我如何使用变量来决定我要查找哪个成员进行排序?

2 个答案:

答案 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);