问题描述
我必须以这种方式对列表进行排序,所以我必须在变量中使用函数
Func<Elem,Elem,int> w = (elem1,elem2) => DateTime.Compare(elem1.Date,elem2.Date);
list.Sort(w);
如何将函数转换为比较器?
解决方法
您可以使用Comparison<Elem>
类或创建实现IComparer<Elem>
list.Sort(new Comparison<Elem>((v1,v2) => DateTime.Compare(v1.Date,v2.Date)));
IComparer实现
public class ElemComparer : IComparer<Elem>
{
public int Compare(Elem x,Elem y)
{
return DateTime.Compare(x.Date,y.Date);
}
}
使用ElemComparer
list.Sort(new ElemComparer());
,
对于任何类型,您都可以自行实现:
List<object> list = new List<object>();
list.Sort((e1,e2) =>
{ // Do compensation based on e1 and e2,and return -1,1
return 0;
});
某些类型具有默认的比较器,如下所示:
List<DateTime> list = new List<DateTime>();
list.Sort(Comparer<DateTime>.Default);
或:
List<DateTime> list = new List<DateTime>();
list.Sort(DateTime.Compare);