Kaip galiu grąžinti tuščią „IE“ skaičių?

Atsižvelgiant į šį klausimą ir pasiūlymus šiuo klausimu , nusprendžiau pakeisti šį pradinį metodą ir paklausti, ar IEnumarable yra kokių nors reikšmių., Jei nenurodysite IEnumerable be reikšmių.

Štai taip:

 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 }); } 

Kadangi viskas yra grąžinimo ataskaitoje, aš nežinau, kaip tai padaryti. Ar kažkas panašaus į šį darbą?

 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>(); } } 

Minėtas metodas neveikia ir iš tikrųjų neturėtų; Aš tiesiog manau, kad tai iliustruoja mano ketinimus. Manau, reikia nurodyti, kad kodas neveikia, nes negalite sukurti abstrakčios klasės egzemplioriaus.

Čia yra skambinimo kodas, nenoriu, kad jis bet kuriuo metu gautų „nulį“.

 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; } } 

Dėkojame už jūsų laiką.

226
12 июля '10 в 18:22 2010-07-12 18:22 Sergio Tapia yra nustatyta liepos 12 d., 10 val
@ 5 atsakymai

Ar galite naudoti list ?? Enumerable.Empty<Friend>() list ?? Enumerable.Empty<Friend>() arba „ FindFriends sugrįžimas Enumerable.Empty<Friend>()

382
12 июля '10 в 18:24 2010-07-12 18:24 atsakymą pateikė Michael Mrozek , liepos 12 d., 10 val., 18:24 val. 2010-07-12 18:24

Galite grįžti į „ Enumerable.Empty<T>() .

108
12 июля '10 в 18:25 2010-07-12 18:25 LukeH atsakymą pateikė liepos 10 d., 10 val. 18:25 2010-07-12 18:25

Kalbant apie mane, labiausiai elegantiškas būdas - yield break

72
12 июля '10 в 18:26 2010-07-12 18:26 Atsakymą davė Pavelas Tupitsynas liepos 12 d., 10 val. 18:26 val. 2010-07-12 18:26

Tai, žinoma, yra tik asmeninio pasirinkimo klausimas, tačiau šią funkciją parašysiu grąžinant:

 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 } } } } 
7
12 июля '10 в 18:40 2010-07-12 18:40 atsakymas pateikiamas chaosui, liepos 12 d., 10 val., 18:40, 2010-07-12 18:40

Manau, kad paprasčiausias būdas būtų

  return new Friend[0]; 

Grąžinimo reikalavimai paprasčiausiai yra tai, kad metodas grąžina objektą, kuris įgyvendina IEnumerable<Friend> . Faktas, kad esant skirtingoms aplinkybėms jūs grąžinate du skirtingus objektų tipus, nesvarbu, ar abu įdiegia IEnumerable.

0
12 июля '10 в 18:38 2010-07-12 18:38 Atsakymą davė James Curran , liepos 12 d., 10 val., 18:38, 2010-07-12 18:38

Kiti klausimai apie arba Ask a Question