我有一份有序的人员名单。我有一个我认识的人存在于该系列中。如何确定列表中的下一个人?
答案 0 :(得分:29)
你可以这样做:
IEnumerable<Person> persons = ..
var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
.ElementAt(1); //Zero-indexed, means second
我们的想法是生成一个导致跳过元素的序列,直到满足条件,然后取那个序列的第二个元素。
如果无法保证查询将返回结果(例如,从未找到匹配项,或者是序列的最后一个元素),则可以将ElementAt
替换为ElementAtOrDefault
,然后执行null
- 检查成功/失败的测试。
我注意到你在问题中说你有订购的人员名单。如果您能够更详细地解释这意味着什么,我们可能能够提供更好的答案(例如,我们可能不必对序列进行线性搜索)。
答案 1 :(得分:5)
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。
答案 2 :(得分:0)
您可以使用如下代码:
String toDir = Environment.GetCommandLineArgs().SkipWhile(x => x != "/to").Skip(1).Take(1).FirstOrDefault();
如果未提供== null
命令行参数,则该值为"/to"
,如果提供了路径,则为non-null
。