我正在解决一个问题,我知道这些代码以不同的方式工作,但我不明白为什么第二个是不正确的,有什么不同。
public Person GetOldestMember()
{
Person oldestPerson = people.OrderByDescending(x => x.Age).FirstOrDefault();
return oldestPerson;
}
。
public Person GetOldestMember()
{
Person oldestPerson = new Person(-1); //this is a constructor with parameter age
foreach (Person person in people)
{
if (person.Age > oldestPerson.Age)
{
oldestPerson = person;
}
}
return oldestPerson;
}
发布于 2019-06-13 03:50:11
关于LINQ查询,有一件事不是一目了然的,那就是它们往往“很快就会失败”。也就是说,一旦满足指定的条件,它们就退出循环,而不是迭代整个序列。
例如,如果序列中有任何项,FirstOrDefault()
将获取序列中的第一个项并立即退出。如果没有,它会立即返回null。
但是,您的for
循环将遍历序列中的每个元素。如果序列非常大,这可能会很耗时。
LINQ表达式非常有效,它只检索尽可能快地满足请求所需的数据。您不太可能编写更高效的for
循环(尽管并非不可能)。
https://stackoverflow.com/questions/56569311
复制相似问题