使用Linq在集合中的指定元素之后查找元素

我有一份有序的人员名单。 我有一个我认识的人存在于该系列中。 如何确定列表中的下一个人?

你可以这样做:

IEnumerable persons = .. var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack") .ElementAt(1); //Zero-indexed, means second 

我们的想法是生成一个序列,导致跳过元素直到满足条件,然后获取该序列的第二个元素。

如果无法保证查询将返回结果(例如,从未找到匹配项,或者是序列的最后一个元素),则可以使用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(); 

其中isThePerson是一个接受一个人的方法,如果它是你感兴趣的人,则返回true。