c# - 如何将搜索参数传递给将搜索 ac# 集合的函数
问题描述
假设我有一个表单集合:
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, TResult>
委托传递给它,它用作内置Sort
方法的键选择器
public static void SortExt<T, TValue>(this List<T> collection, Func<T, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
collection.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
请记住,您应该比较比较对象的相同字段。
使用示例
myMembers.SortExt(member => member.FirstName);
如果只想比较myMembers
集合,可以简化声明
public static void SortExt<TValue>(this List<Member> members, Func<Member, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
members.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
另一种选择是引入一个Comparison<T>
委托实例来存储字段比较的逻辑并将其传递给Sort
方法。您可以在此处指定所需的任何自定义比较
Comparison<Member> comparison = (x, y) => x.FirstName.CompareTo(y.FirstName);
myMembers.Sort(comparison);
推荐阅读
- python-3.x - 在创建 Google Compute Engine VM 实例时添加环境变量
- python - 将嵌套列表扩展到行、创建标题并映射回原始列
- azure - ASP.NET Core 2.2 站点预热
- datatables - ? 让带有固定列的 datatables.js 水平滚动在移动设备上工作?
- css - 更改 textInput 闪亮小部件的占位符颜色
- bash - grep 到远程主机上的文件和 scp 到本地
- brightway - 在 Brightway 中计算不同影响评估方法的蒙特卡洛结果的有效方法
- java - 如何提高我的 Android Studio 应用程序性能
- ssas - SSAS MDX 脚本查看针对不同日期的新计算度量
- python - 如何控制布局PyQt5的尺寸