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

本文关键字:排序 错误 编译 数组 | 更新日期: 2023-09-27 18:17:23

我正在用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;});

我得到编译错误:"Cannot convert anonymous method to type 'System.Collections.Generic. "因为它不是委托类型。我只用

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

和所有其他的东西都反过来做。为什么它会给我一个错误,如何改变它的工作?

Thanks for help

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

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

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

您正在使用的委托用于比较。没有具有索引、长度比较的Array.Sort重载。

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

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

注释IComparer,而不是Comparison

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

或者,尝试.OrderByDescending扩展方法,当您包含using System.Linq;

时可用。

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

如果你这样做,你需要一个特别从IComparer继承的参数——你不能只使用一个匿名委托。

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