我们如何通过输入数组索引到lambda表达式

时间:2017-05-18 07:40:04

标签: c# lambda

我是lambda表达式的新手,我试图在这里编写一个简单的程序来理解Func<>的用法,并且无法理解为什么我不能使用索引来循环输入数组?

class Program
{
    static void Main(string[] args)
    {
        int[] array = new int[4];
        array[0] = -1; array[1] = 2; array[2] = 3; array[3] = 8;

        Func<Array, int> DoSomething = inputarray =>
        {
            for (int i = 0; i < inputarray.Length; i++)
            {
                if (inputarray[i] > inputarray[i + 1])
                {
                    //;
                }

            }
            return 1;
        };

    }
}

这会出错

  

无法将[]索引应用于Array

类型的表达式

我该如何解决这个问题?基本上,我将如何遍历输入数组?

2 个答案:

答案 0 :(得分:1)

您需要在显示的示例中为数组提供类型。

尝试:

Func<int[], int> DoSomething

代替。

答案 1 :(得分:1)

System.Array是所有数组的基类,如int[]。它还实现IList,允许按索引访问项目,但Item property实现为显式接口成员实现。仅当Array实例强制转换为IList接口时才能使用它:

var list = (System.Collections.IList)inputarray;

现在您可以使用索引器,但它将返回不是整数的对象,因此您无法在不进行强制转换的情况下使用以下内容,因为无法将对象与>进行比较:

if (list[i] > list[i + 1])
{
    //;
}

我想你想使用int[]

Func<int[], int> DoSomething = inputarray =>
// ...