如何在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)));

I公司实施

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, 0, 1
return 0;
});

有些类型有默认的比较器,比如:

List<DateTime> list = new List<DateTime>();
list.Sort(Comparer<DateTime>.Default);

或:

List<DateTime> list = new List<DateTime>();
list.Sort(DateTime.Compare);

最新更新