やっと起きたエンジニアのメモ

ruby, js, 興味の赴くままに

yield を使ってみた

yieldって遅いからあまり使わないみたいだけど、使う機会に巡り会った^^

コンテキスト キーワード yield - C# リファレンス | Microsoft Docs

List>型のデータをフラット(配列)にする必要があって、初のyieldを使うことになった。(データ量は100程度だったので速度は気にならなかった。

namespace Sample
{
    public class MyItem
    {
        public Guid ID;

        public MyItem()
        {
            this.ID = Guid.NewGuid();
        }
    }

    public class MyItems : IEnumerable<MyItem>
    {
        public List<MyItem> itemList = new List<MyItem>();
    
        public IEnumerator<MyItem>  GetEnumerator()
        {
            return this.itemList.GetEnumerator();
        }
        
        IEnumerator  IEnumerable.GetEnumerator()
        {
 	    throw new NotImplementedException();
        }
    }

    class YieldSample
    {
        static void Main(string[] args)
        {
            List<MyItems> itemList = new List<MyItems>();
            // データ格納
            ・・・

            foreach (var item in GetEnumerable(itemList))
            {
                Console.write(item.ID);
            }
        }

        public static IEnumerable<MyItem> GetEnumerable(List<MyItems> itemsList)
        {
            foreach (var itemList in itemsList)
            {
                foreach (var item in itemList)
                {
                    yield return item;
                }
            }
        }
    }
}

スッキリ書く事はできたと思う。。