天天看點

C# yield關鍵字 操作集合

C#中yield的關鍵字幾乎沒有見過,今天用了一下,感覺很不錯。

他是一個文法糖,直接将集合中滿足條件的資料傳回給調用者,提高性能。

直接上例子:

static void Main(string[] args)
        {
            string[] strs = new string[] { "3", "5", "7", "9" };
            foreach (var item in StrToInt(strs))
            {
                if (item > 5)
                {
                    Console.WriteLine(item.GetType() + "..." + item);
                }
            }
            Console.ReadKey();
        }

        static List<int> StrToIntGeneral(string[] str)
        {
            //處理集合資料一般我們會在外面定義一個集合,然後在循環添加處理過的資料,然後将資料結果傳回
            List<int> list = new List<int>();
            foreach (var s in str)
            {
                //這裡需要把數組/集合裡面的數組全部循環完畢再操作
                list.Add(Convert.ToInt32(s));
            }
            return list;
        }

        static IEnumerable<int> StrToInt(string[] str)
        {
            foreach (var s in str)
            {   
                yield return Convert.ToInt32(s);
            }
            //yield return就是将return的結果加到傳回的集合中
            //yield 關鍵字,将目前代碼當機,将控制器交給調用者,一旦滿足條件立即傳回結果.
        }
           

兩種寫法比較,可以觀察出執行順序和代碼的書寫。

如果資料量很大,那麼性能就非常的明顯了,找到資料交給被調用者直接傳回結果,不循環所有的資料再傳回.

動手調試一下看看呢.

C# yield關鍵字 操作集合