C# Lambda表达式,用于选择索引>;x

C# Lambda表达式,用于选择索引>;x,c#,.net-4.0,lambda,C#,.net 4.0,Lambda,我有一个列表,其中包含int类型的数组。使用lambda表达式如何选择索引大于2的所有项的列表 例如,下面的列表应返回8和9: var items = new List<object>() { new int[3] { 1, 2, 3 }, new int[1] { 4 }, new int[5] { 5, 6, 7, 8, 9 } }; //var overTwoIndexItems = ? var items=新

我有一个列表,其中包含
int
类型的数组。使用lambda表达式如何选择索引大于2的所有项的列表

例如,下面的列表应返回8和9:

var items = new List<object>()
    {
        new int[3] { 1, 2, 3 },
        new int[1] { 4 },
        new int[5] { 5, 6, 7, 8, 9 }
    };

//var overTwoIndexItems = ?
var items=新列表()
{
新int[3]{1,2,3},
新int[1]{4},
新int[5]{5,6,7,8,9}
};
//var overTwoIndexItems=?

您可以使用
Skip
跳过每个数组中的前三项(即索引为0、1和2的项)。您可以使用
SelectMany
展平结果:

var overTwoIndexItems = items.SelectMany(a => ((int[])a).Skip(3));
或更安全的版本(当您将非整数数组的内容添加到对象列表时,将处理这种情况):

顺便问一下:为什么要使用
对象列表
?看起来像是
ArrayList
。泛型的要点是强类型参数。使用
列表
。然后查询将如下所示:

items.SelectMany(a => a.Skip(3))

@Sergey有正确的方法,但鉴于它是一个
IList
,您需要先将其强制转换

var result = items.Select (x => (int[])x).SelectMany (x => x.Skip(3));
//result = new int[]{ 8, 9 };
items.SelectMany(a => a.Skip(3))
var result = items.Select (x => (int[])x).SelectMany (x => x.Skip(3));
//result = new int[]{ 8, 9 };