Angesichts des folgenden Codes und der in dieser Frage gegebenen Vorschläge habe ich beschlossen, diese ursprüngliche Methode zu ändern und zu fragen, ob Werte in IEnumarable vorhanden sind. Geben Sie sie zurück, wenn nicht, geben Sie eine IEnumerable ohne Werte zurück.
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 in der return-Anweisung befindet, weiß ich nicht, wie ich das tun könnte. Würde so etwas 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 sollte es auch nicht. Ich fühle nur, dass es meine Absichten veranschaulicht. Ich denke, ich sollte angeben, dass der Code nicht funktioniert, da Sie keine Instanz einer abstrakten Klasse erstellen können.
Hier ist der aufrufende Code, ich möchte nicht, dass er zu irgendeinem Zeitpunkt eine Null-IEnumerable erhält:
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;
}
}
Vielen Dank für Ihre Zeit.