Aşağıdaki kod ve bu soruda verilen öneriler göz önüne alındığında, bu özgün yöntemi değiştirmeye karar verdim ve IEnumarable herhangi bir değer olup olmadığını sormak, değer içermeyen bir IEnumerable döndürmez.
İşte yöntem:
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
});
}
Her şey dönüş ifadesinin içinde olduğundan, bunu nasıl yapabileceğimi bilmiyorum. Bunun gibi bir şey olur mu?
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>();
}
}
Yukarıdaki yöntem işe yaramıyor ve aslında olması gerekmiyor; Sadece niyetlerimi gösterdiğini hissediyorum. Soyut bir sınıf örneği oluşturamazsınız çünkü kod çalışmıyor belirtmek gerektiğini hissediyorum.
İşte arama kodu, herhangi bir zamanda boş bir IEnumerable almak istemiyorum:
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;
}
}
Zaman ayırdığın için teşekkürler.