Bei folgendem Code und den angegebenen Vorschlägen in dieser Frage habe ich beschlossen, diese ursprüngliche Methode zu ändern und zu fragen, ob es irgendwelche Werte in der IEnumarable
zurück, andernfalls wird ein IEnumerable
ohne Werte.
Hier ist die Methode:
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
});
}
Da sich alles innerhalb der Return-Anweisung befindet, weiß ich nicht, wie ich dies tun könnte. Würde etwas wie dies funktionieren?
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>();
}
}
Die obige Methode funktioniert nicht, und eigentlich soll sie das auch gar nicht; ich finde nur, dass sie meine Absichten verdeutlicht. Ich glaube, ich sollte angeben, dass der Code nicht funktioniert, weil man keine Instanz einer abstrakten Klasse erstellen kann.
Hier ist der aufrufende Code, ich will nicht, dass er eine Null empfängt IEnumerable
zu jeder Zeit:
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;
}
}
Ich danke Ihnen für Ihre Zeit.