尝试在C#中对数组进行排序时出现编译错误

Mik*_*ott 2 c# arrays sorting delegates integer

我正在用C#做作业,需要对数组进行排序.我可以使用排序整数数组

Array.sort<int>(a, delegate(int x, int y) { return y-x;});
Run Code Online (Sandbox Code Playgroud)

但是,如果我想从某个位置和一定长度做到这一点

Array.sort<int>(a, 0, m, delegate(int x, int y) { return y-x;});
Run Code Online (Sandbox Code Playgroud)

我得到编译错误:"无法将匿名方法转换为'System.Collections.Generic.IComparer',因为它不是委托类型".我只是通过使用解决了这个问题

Array.sort<int>(a, 0, m);
Run Code Online (Sandbox Code Playgroud)

并向后做所有其他的事情.为什么它会给我一个错误,如何改变它?

感谢帮助

Dav*_*haw 5

第一个示例调用的方法具有签名:

Array.Sort(int[] array, Comparison<int> comparison) 
Run Code Online (Sandbox Code Playgroud)

您使用的代表是比较.没有超载的Array.Sort索引,长度比较.

您尝试调用的方法具有以下签名:

Array.Sort(int[] array, int index, int length, IComparer<int> comparer) 
Run Code Online (Sandbox Code Playgroud)

注意IComparer,而不是比较

如果您需要自定义排序.您将需要创建一个实现IComparer的类,因为这是第4个参数所期望的.

或者,尝试.OrderByDescending使用包含时可用的扩展方法using System.Linq;