Home > Software design >  Passing Delegate to Sort()
Passing Delegate to Sort()

Time:02-23

In the book "Functional C#" by Enrico Buonanno, on page 16, the following Code was given:

namespace System
{
    public delegate int Comparison<in T>(T x, T y);
}

var list = Enumerable.Range(1, 10).Select(i => i * 3).ToList();
list // => [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Comparison<int> alphabetically = (l, r)
=> l.ToString().CompareTo(r.ToString());
list.Sort(alphabetically);
list // => [12, 15, 18, 21, 24, 27, 3, 30, 6, 9]

This, however, when executed in the REPL, doesn't yield anything useful.

error CS1503: Argument "1": Konvertierung von "Comparison<int>" in "System.Collections.Generic.IComparer<int>" nicht möglich.

What's going wrong?

CodePudding user response:

Comparison is an existing delegate in .NET so you don't need to declare your own. Just remove this declaration and corresponding List.Sort(Comparison<T>) will be invoked - compare this and this.

  • Related