Dado el siguiente código y las sugerencias dadas in this question, he decidido modificar este método original y preguntar si hay algún valor en el retorno de IEnumarable, si no se devuelve un IEnumerable sin valores.¿Cómo puedo devolver un IEnumerable vacío?
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
});
}
Ya que todo está dentro de la instrucción de retorno, no sé cómo pude 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; Siento que ilustra mis intenciones. Siento que debo especificar que el código no funciona porque no puede crear una instancia de una clase abstracta.
Aquí está el código de llamada, no quiero que le permite recibir un nulo IEnumerable en cualquier 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 su tiempo.
Mirando el código aquí usted debe utilizar retorno rendimiento y la ruptura de rendimiento. –