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

时间:2011-12-09 01:08:56

标签: c# arrays sorting delegates integer

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

对整数数组进行排序
Array.sort<int>(a, delegate(int x, int y) { return y-x;});

但是,如果我想从某个位置和一定的长度

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

我收到编译错误:“无法将匿名方法转换为'System.Collections.Generic.IComparer',因为它不是委托类型”。 我只是通过使用

解决了这个问题
Array.sort<int>(a, 0, m);

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

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

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

Array.Sort(int[] array, Comparison<int> comparison) 

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

您尝试呼叫的方法具有以下签名:

Array.Sort(int[] array, int index, int length, IComparer<int> comparer) 

注意IComparer,而不是比较

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

或者,尝试.OrderByDescending包含using System.Linq;

时可用的{{1}}扩展方法

答案 1 :(得分:0)

如果您不需要自定义比较器,请将null作为第4个参数传递。

如果这样做,您需要一个专门从IComparer继承的参数 - 您不能只使用匿名委托。

http://msdn.microsoft.com/en-us/library/system.collections.icomparer.aspx