Первый вопрос - нужно ли возвращать List<Friend>
?Вы можете вернуть IEnumerable<Friend>
вместо этого?Если это так, производительность становится намного лучше:
IEnumerable<Friend> FindFriends()
{
return doc.Descendants("user").Select(user => new Friend {
ID = user.Element("id").Value,
Name = user.Element("name").Value,
Url = user.Element("url").Value,
Photo = user.Element("photo").Value
});
}
Вместо того, чтобы фактически создавать новые сегменты и вставлять в них значения, это создает проекцию или новый объект, который просто содержит вселогика для как создавать новые объекты Friend без фактического их создания.Они создаются, когда вызывающий в конечном итоге начинает foreach
через IEnumerable.Это называется «отложенное выполнение».
Это также предполагает одно предположение - все узлы <user>
в вашем фрагменте XML являются друзьями.Если это не так, первая часть выделения XML может быть немного сложнее немного .
И, как указывает @anon, даже если вам нужно вернутьList<Friend>
по некоторым причинам, не очевидным из предоставленной вами информации, вы можете просто позвонить .ToList()
в конце оператора возврата.Это просто выполнит проекцию, которую я описал выше, прямо в новое ведро, поэтому вы создадите только один.