鉴于以下代码和此问题]中给出的建议,我决定修改此原始方法并询问 IEnumarable 中是否有任何值返回它,如果没有则返回没有值的 IEnumerable。
这是方法:
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 }); }
由于一切都在 return 语句中,我不知道我该怎么做。像这样的东西会起作用吗?
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>(); } }
上面的方法行不通,实际上不应该;我只是觉得它说明了我的意图。 我觉得我应该指定代码不起作用,因为您无法创建抽象类的实例。
这是调用代码,我不希望它随时收到 null IEnumerable:
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; } }
感谢您的时间。
你可以使用list ?? Enumerable.Empty<Friend>(),或者有FindFriends回报Enumerable.Empty<Friend>()
list ?? Enumerable.Empty<Friend>()
FindFriends
Enumerable.Empty<Friend>()
这可以在System.Linq命名空间下找到。
System.Linq