C#Sort,无法将lambda表达式转换为System.Array

时间:2016-04-18 22:00:52

标签: c# lambda

基于我在.Sort()上找到的内容,这应该可行

using System;
using System.Linq;

public class Test
{
    public static void Main()
    {
        int[] test = new int[] {6, 2, 1, 4, 9, 3, 7};
        test.Sort((a,b) => a<b);
    }
}

但是,我收到此错误消息:

error CS1660: Cannot convert `lambda expression' to non-delegate type `System.Array'

这是我能找到的最简单的错误版本。在我的情况下,我正在使用一个字符串,给它一个复杂的排名值,然后比较它。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

您所追求的overload of Sort需要delegate that takes in two objects of the type contained within the array, and returns an int。您需要更改表达式以返回int,其中您返回的值为前一个项目的负值,当项目为&#34;等于&#34;时为零,并为项目返回正值来到另一个。

此外,对于数组,Sort方法为static,因此您使用类名称而不是实例来调用它:

Array.Sort(test, (left, right) => left.CompareTo(right));

CompareToIComparable类型的内置函数(如int),它以我上面描述的方式返回int,所以它方便用于分类。