Ani*_*Ani 29
你可以这样做:
IEnumerable<Person> persons = ..
var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
.ElementAt(1); //Zero-indexed, means second
Run Code Online (Sandbox Code Playgroud)
这样做是为了产生导致跳过元素,直至满足条件的序列,然后采取第二元件即序列.
如果不能保证查询将返回结果(例如,从未找到匹配,或者是序列的最后一个元素),则可以替换ElementAt为ElementAtOrDefault,然后执行null-test以检查是否成功.
我注意到你在问题中说你有一个有序的人员名单.如果您能够更详细地解释这意味着什么,我们可能能够提供更好的答案(例如,我们可能不必对序列进行线性搜索).
SkipWhile是一个采用谓词并跳过所有内容直到谓词为假的方法。它返回该元素以及之后的所有内容。
var remainingPeople = collectionOfPeople.SkipWhile(p => !isThePerson(p));
if (remainingPeople.Count() == 1)
{
// the person was the last in the list.
}
var nextPerson = remainingPeople.Skip(1).First();
Run Code Online (Sandbox Code Playgroud)
其中isThePerson的方法可以接收一个人,如果您感兴趣的人,则返回true。