1. ホーム
  2. c#

[解決済み] 空のIEnumerableを返すにはどうしたらいいですか?

2022-03-15 21:07:05

質問

次のコードと与えられたサジェスチョンがあるとします。 この質問で 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>()