Вы совершенно правы, он может перебирать список, вы можете думать, что код в вашем вопросе концептуально совпадает со следующим:
private static Post GetPost(Guid id)
{
Post p = default(Post);
foreach (Post post in _Posts)
{
if (post.Id == id)
{
p = post;
break;
}
}
return p;
}
Для написания фрагмента кода требуется меньше кода, и, что важно, вы сейчас говорите, что хотите найти, а не как его найти:
private static Post GetPost(Guid id)
{
return _Posts.Find(delegate(Post p)
{
return p.Id == id;
});
}
В C # 3.0 это можно еще больше сократить, используя так называемое « лямбда-выражение » до:
private static Post NewGetPost(Guid id)
{
return _Posts.Find(p => p.Id == id);
}
Использование наименьшего количества читаемого кода для достижения одной и той же цели делает авторов и читателей этого кода счастливее.