学习yield关键字

来源:互联网 发布:线刷软件 编辑:程序博客网 时间:2024/06/15 10:48

当使用yield关键字时,这就意味着该函数返回的是一个迭代器(iterator),不用自己维护一个迭代器内部的状态管理(比如C++中的itereator<T>,或实现C#中实现的接口IEmuerator<T>),其使用模式如下:

yield return <Expression>;

yield break;

其中第二种用于for循环终止。这样的模式也就实现了Linq的查询,但注意yield使用要求如下:

1.      迭代器函数不能有ref/out参数。

2.      迭代器函数返回必须是IEnumberable、IEnumerable<T>、IEnumerator或IEnumerator<T>。

3.      yield 不能用于匿名函数返回。

4.      yield return不能位于try/catch语句中,可以位于try/finally语句try语句中。

5.      yield break可以位于try/cache语句中,不能位于try/finllay语句finally语句中。

测试代码如下:

class Program    {        static IEnumerable<int> test()        {            for (int i = 0; i < 4; ++i)            {                if (i == 3) yield break;                yield return i;            }        }        public static IEnumerable<string> Names {            get {                yield return "hello";                yield return "test";            }                }        static void Main(string[] args)        {            IEnumerable<int> l = test();            foreach (var item in new List<int>(l))            {                Console.WriteLine("item:{0}", item);            }            foreach (var item in Names)            {                Console.WriteLine("name:{0}", item);            }            Console.ReadLine();        }}

具体可参考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield

原创粉丝点击