다음 코드 와이 질문에 제공된 제안을 감안할 때이 원래 방법을 수정하고 값이없는 IEnumerable을 반환하지 않으면 IEnumarable에 값이 있는지 확인하기로 결정했습니다.
방법은 다음과 같습니다.
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;
}
}
시간 내 주셔서 감사합니다.
2
여기서 코드를 보면 yield return 및 yield break를 사용해야합니다.
—
Chris Marisic