Ответ 1
Вы можете сделать что-то вроде этого:
IEnumerable<Person> persons = ..
var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
.ElementAt(1); //Zero-indexed, means second
Идея состоит в том, чтобы создать последовательность, приводящую к пропусканию элементов, пока вы не встретите условие, а затем возьмите второй элемент этой последовательности.
Если нет гарантии, что запрос вернет результат (например, совпадение никогда не будет найдено или будет последним элементом последовательности), вы можете заменить ElementAt
на ElementAtOrDefault
, а затем сделать null
-test, чтобы проверить успех/неудачу.
Я замечаю, что вы говорите в своем вопросе, что у вас есть упорядоченный список людей. Если бы вы могли объяснить, что это означает более подробно, мы могли бы обеспечить лучший ответ (например, нам может не потребоваться линейный поиск последовательности).