402 Stimmen

Wie kann ich ein leeres IEnumerable zurückgeben?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X