Dado el siguiente código y las sugerencias dadas en esta pregunta , he decidido modificar este método original y preguntar si hay algún valor en el IEnumarable, devolverlo, si no devolver un IEnumerable sin valores.
Aquí está el método:
public IEnumerable<Friend> FindFriends()
{
//Many thanks to Rex-M for his help with this one.
//https://stackoverflow.com/users/67/rex-m
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
});
}
Como todo está dentro de la declaración de devolución, no sé cómo podría hacer esto. Algo como esto funcionaría?
public IEnumerable<Friend> FindFriends()
{
//Many thanks to Rex-M for his help with this one.
//https://stackoverflow.com/users/67/rex-m
if (userExists)
{
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
});
}
else
{
return new IEnumerable<Friend>();
}
}
El método anterior no funciona, y de hecho no se supone que lo haga; Solo siento que ilustra mis intenciones. Creo que debería especificar que el código no funciona porque no se puede crear una instancia de una clase abstracta.
Aquí está el código de llamada, no quiero que reciba un IEnumerable nulo en ningún momento:
private void SetUserFriends(IEnumerable<Friend> list)
{
int x = 40;
int y = 3;
foreach (Friend friend in list)
{
FriendControl control = new FriendControl();
control.ID = friend.ID;
control.URL = friend.URL;
control.SetID(friend.ID);
control.SetName(friend.Name);
control.SetImage(friend.Photo);
control.Location = new Point(x, y);
panel2.Controls.Add(control);
y = y + control.Height + 4;
}
}
Gracias por tu tiempo.