【问题标题】:How to cast function to comparer in C# [duplicate]如何在C#中将函数转换为比较器[重复]
【发布时间】:2020-08-19 21:20:45
【问题描述】:

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

Func<Elem, Elem, int> w = (elem1, elem2) => DateTime.Compare(elem1.Date, elem2.Date);
list.Sort(w);

如何将函数转换为比较器?

【问题讨论】:

  • 列表是什么类?

标签: c# lambda-calculus


【解决方案1】:

您可以使用Comparison&lt;Elem&gt; 类或创建实现IComparer&lt;Elem&gt; 的类

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

【讨论】:

  • DateTime.Compare 隐式转换为Comparison&lt;DateTime&gt;,因此您可以只使用list.Sort(DateTime.Compare)
  • @Lee Elem 不是日期时间。只有在需要 DateTimes 的排序列表时才可以使用 DateTime.Compare,但那是 List&lt;Elem&gt;
【解决方案2】:

对于您可以自行实现的任何类型:

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

【讨论】:

  • 应该对 Elem List&lt;Elem&gt; 列表进行排序
猜你喜欢
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多