How can I return an empty IEnumerable?
考虑到下面的代码和这个问题中给出的建议,我决定修改这个原始方法,并询问ienumable中是否有任何值返回它,如果不返回没有值的ienumerable。
方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 }); } |
因为一切都在返回声明中,我不知道该怎么做。想要这个工作吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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>(); } } |
上面的方法不起作用,事实上它不应该起作用;我只是觉得它说明了我的意图。我觉得应该指定代码不起作用,因为您不能创建抽象类的实例。
这是调用代码,我不希望它在任何时候接收空的IEnumerable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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; } } |
谢谢你抽出时间。
您可以使用
你可以退回
对我来说,最优雅的方式是
当然,这只是个人偏好的问题,但我会用yield return编写这个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public IEnumerable<Friend> FindFriends() { //Many thanks to Rex-M for his help with this one. //http://stackoverflow.com/users/67/rex-m if (userExists) { foreach(var user in doc.Descendants("user")) { yield return new Friend { ID = user.Element("id").Value, Name = user.Element("name").Value, URL = user.Element("url").Value, Photo = user.Element("photo").Value } } } } |
我想最简单的方法是
1 |
返回的要求只是方法返回一个实现