我是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
类型的表达式
我该如何解决这个问题?基本上,我将如何遍历输入数组?
答案 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 =>
// ...