Étant donné le code suivant et les suggestions données dans cette question , j'ai décidé de modifier cette méthode d'origine et de demander s'il y a des valeurs dans le IEnumarable le renvoyer, sinon retourner un IEnumerable sans valeurs.
Voici la méthode:
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
});
}
Puisque tout est à l'intérieur de la déclaration de retour, je ne sais pas comment je pourrais faire cela. Quelque chose comme ce travail?
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>();
}
}
La méthode ci-dessus ne fonctionne pas, et en fait, elle n'est pas censée le faire; J'ai l'impression que cela illustre mes intentions. Je pense que je devrais spécifier que le code ne fonctionne pas parce que vous ne pouvez pas créer une instance d'une classe abstraite.
Voici le code appelant, je ne veux pas qu'il reçoive un IEnumerable nul à tout moment:
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;
}
}
Merci pour votre temps.