通过Linq应用谓词后获取下一个枚举项

时间:2016-09-12 11:57:51

标签: c# linq

我正在寻找一种优雅的方式来返回下一个枚举项目。

假设我有这个系列:

IEnumerable<int> collection = new List<int>{1,2,3,4,5,6,7,8,9,10};

这个谓词:

Func<int,bool> pred = i => i == 5;

我想运行谓词,然后获取下一个项目。 我想使用这样的方法:

var item = collection.GetNextItem(pred); // 6

我知道有很多方法可以对它进行编码(通过GetEnumeratorMoveNext),但我想知道是否有Linq方法已经完成,或者任何其他优雅的Linq技巧。

1 个答案:

答案 0 :(得分:3)

您可以使用SkipWhile

var item = collection.SkipWhile(i => i != 5).Skip(1).First();

这会跳过与谓词匹配的所有项目,然后跳过匹配的项目,然后获取其余项目中的第一项。

如果您的pred已预先定义但无法更改,则可以这样调用SkipWhile

var item = collection.SkipWhile(i => !pred(i)).Skip(1).First();