首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当编写可枚举时,返回变量的值是多少?

当编写可枚举时,返回变量的值是多少?
EN

Stack Overflow用户
提问于 2011-07-18 19:32:20
回答 3查看 234关注 0票数 0

可能重复:

What is the yield keyword used for in C#?

假设我有如下代码:

(蒸汽是污秽物)

代码语言:javascript
复制
using(BinaryWriter bw = new BinaryWriter(stream))
{
  foreach(byte[] b in BreakBytes(objectOfBytes))
  {
    writer.Write(b);
  }
}

因此,要使BreakBytes工作,它必须执行如下操作:

代码语言:javascript
复制
public static IEnumerable<byte[]> BreakBytes(byte[] b)
{
  ..
  while(..) {

     yield return some_buffer;

  }
  ..
}

屈服到底在做什么?它能追踪到它的位置吗?

我相信它是返回到调用的前端循环,但继续到下一个迭代时,再次调用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-18 19:36:24

简而言之,该方法中的代码被重写为一台状态机,正如您所怀疑的那样:它跟踪循环中的位置,返回给调用者,并继续其中断的位置。

票数 3
EN

Stack Overflow用户

发布于 2011-07-18 19:35:36

yield在C#中非常特殊,因为它不遵循正常的控制流。

当迭代返回的IEnumerable时,BreakBytes函数将被调用并运行,直到它产生一个值。控件将被传递回foreach循环。当循环步骤到下一项时,BreakBytes将继续并运行,直到它到达另一个yield

这个有点奇怪的构造给出的好处是,如果只枚举了IEnumerable的一部分,那么只需要生成该部分。

票数 1
EN

Stack Overflow用户

发布于 2011-07-18 19:42:24

乔恩·斯基特可以告诉你关于他们的一切:http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx

是。它跟踪自己的内部状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6738342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档