【发布时间】:2020-06-01 01:28:14
【问题描述】:
假设我有一个表单集合:
List<Member> myMembers= new List<Member>()
{
new Member(){ID=1,FirstName="John",LastName="Doe"},
new Member(){ID=3,FirstName="Allan",LastName="Jones"},
new Member(){ID=2,FirstName="Martin",LastName="Moe"},
new Member(){ID=4,FirstName="Ludwig",LastName="Issac"}
};
我可以通过 FirstName 对这个列表进行排序,方法是:
myMembers.Sort((x, y) => x.FirstName.CompareTo(y.FirstName));
我想在函数内部执行此操作,以便可以传递所需的搜索参数。比如:
public void sortCollection( parameter SearchTerm, List<Member> myCollection )
{
myCollection ((x, y) => x.SearchTerm.CompareTo(y.FirstName));
}
显然在这里,我无法通过这种方式传递所需的搜索字段,但是可以按照我的要求进行操作吗?
【问题讨论】:
-
您可以传递一个函数
Func<T>,它将包含所需的属性 -
我不会为这样做的方法而烦恼。只需按原样使用
IEnumerable.OrderBy或Sort。并研究更大的鱼 -
不要认为你可以在没有反射或其他魔法的情况下推断出这样的属性。但是有一个问题,在这个例子中,你为什么要为基本的内置类型(如 String)使用排序谓词?
-
请分享一个你正在尝试做的例子。
-
为什么要将排序作为具有通用搜索词的功能。 C# linq 已经为我们提供了 Linq
OrderBy()和Sort()方法,您可以在其中根据您的要求传递谓词。就像myMembers.Sort(x => x.Id);或myMembers.Sort(x => x.FirstName);或myMembers.Sort(x => x.LastName);我相信你只是在重新发明轮子。如果我在这里错了,请纠正我
标签: c# list linq sorting collections