C# yield关键字

Posted by JP on July 24, 2019

C# yield关键字

还是和以前一样,我先上代码,请大家先拿到我的代码或者你跟着敲,运行看效果,以及理解每行带代码的作用。我们要带着为什么要用Yield这个关键字,不用可以吗这个目的去学知识,我相信会更加的有意思。

首先我贴出平时正常输出偶数集合的办法

    class Program
    {
        static List<int> _numArray;

        static Program()
        {
            _numArray = new List<int>();
            for (int i = 0; i <= 10; i++)
                _numArray.Add(i);
        }

        static void Main(string[] args) => TestMethod();

        private static void TestMethod()
        {
            foreach (var item in GetAllEvenNumber())
                Console.WriteLine(item);
            Console.ReadKey();
        }

        private static IEnumerable<int> GetAllEvenNumber()
        {
            #region 不使用yield
            //var result = new List<int>();
            //foreach (var num in _numArray)
            //{
            //    if (num % 2 == 0)
            //        result.Add(num);
            //}
            //return result;
            #endregion

            #region 使用yield
            foreach (var num in _numArray)
            {
                if (num % 2 == 0)
                    yield return num;
            }
            yield break;//当前集合已经遍历完毕,我们就跳出当前函数,其实你不加也可以
            //这个作用就是提前结束当前函数,就是说这个函数运行完毕了。 
            #endregion
        }
    }

大家测试了2个代码结果没,是不是都可以正确拿到全部偶数集合,具体我需要你们测,这样进步快,才会真是学会。只看不练假把戏。

现在我们说他们的区别: 这个才是真正要学的地方 我们需要下断点

Reference: 彻底搞懂C#之Yield Return语法的作用和好处