星空网 > 软件开发 > ASP.net

C# yield

  C#中的yield可以应用在一个可迭代的方法中,我们必须真正理解此关键词,才能将它正确的应用到实际生产中。为了说明yield会出现让我们迷惑的结果,下面先定义一个MyObject类:

1   class MyObject2   {3    public int Value{get;set;}4   }

  MyObject类用于存放一个值,下面定义一个IEnumerable<MyObject>的方法:

1 IEnumerable<MyObject> GetYieldObjects()2 {3   for (int i = 0; i < 10; i++)4   {5     Console.WriteLine("GetObjects() i="+i.ToString());6     yield return new MyObject() { Value = i };7   }8 }

   方法中用yield return返回实例化的MyObject对象,为了便于记录GetYieldObjects()方法实际调用的过程,这里用Console.WriteLine来记录每次调用的过程。下面声明一个objects对象,然后进行第一次迭代,在第一次迭代过程中,对每个迭代项目的值进行+10处理,然后进行第2此迭代,看看是否会将处理后的值进行输出:

 1 //此时不调用GetObjects()的内部循环 2 var objects = GetYieldObjects(); 3 //每次迭代会调用GetObjects()对应i的内容 4 foreach (var item in objects) 5 { 6   Console.WriteLine("1 foreach (var item in objects) item.Value=" + item.Value.ToString());//0..9 7   item.Value += 10; 8 } 9 //每次迭代会调用GetObjects()对应i的内容10 foreach (var item in objects)11 {12   Console.WriteLine("2 foreach (var item in objects) item.Value=" + item.Value.ToString());//0..913   Console.WriteLine(item.Value.ToString());//0..914 }

   在第2次迭代时,输出的还是0到9,并不是10到19.请看下面的迭代过程:

当第一次迭代时候,每次迭代会调用GetObject()方法中的yield return语句,而不是在var objects=GetObjects()进行实例化。当yield取到一个MyObject对象后立刻返回给迭代器,并将其值进行输出,然后继续调用GetObjects方法中的yield return语句,

因此每次循环时,实际上都是一个新的对象。如下图所示:

C# yield

 

C# yield

   当然如果将上面的代码稍作修改,用objects=GetYieldObjects().ToArray()的话,那么第二次输出的就是10到19:

 1 objects = GetYieldObjects().ToArray(); 2 foreach (var item in objects) 3 { 4   item.Value += 10; 5 } 6  7 foreach (var item in objects) 8 { 9   Console.WriteLine(item.Value.ToString());//10..1910 }

 




原标题:C# yield

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

上海货物空运:https://www.goluckyvip.com/tag/102864.html
合肥空运货运:https://www.goluckyvip.com/tag/102865.html
空运快递进口:https://www.goluckyvip.com/tag/102866.html
天津空运货:https://www.goluckyvip.com/tag/102867.html
贵阳空运托运:https://www.goluckyvip.com/tag/102868.html
空运出口运输:https://www.goluckyvip.com/tag/102869.html
武陵山大裂谷周围景点 武陵山大裂谷周围景点图片:https://www.vstour.cn/a/411233.html
南美旅游报价(探索南美洲的旅行费用):https://www.vstour.cn/a/411234.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流