我正在寻找一种优雅的方式来返回下一个枚举项目。
假设我有这个系列:
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
我知道有很多方法可以对它进行编码(通过GetEnumerator
和MoveNext
),但我想知道是否有Linq方法已经完成,或者任何其他优雅的Linq技巧。
答案 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();