如何在C#中将函数转换为比较器

问题描述

我必须以这种方式对列表进行排序,所以我必须在变量中使用函数

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...