在编写一个枚举时,什么产生return var?
可能重复:
在C#中使用的yield关键字是什么?
假设我的代码如下所示:
(蒸汽是文件流)
using(BinaryWriter bw = new BinaryWriter(stream))
{
foreach(byte[] b in BreakBytes(objectOfBytes))
{
writer.Write(b);
}
}
所以对于BreakBytes的工作,它必须做一些事情:
public static IEnumerable<byte[]> BreakBytes(byte[] b)
{
..
while(..) {
yield return some_buffer;
}
..
}
什么是收益率? 它是否跟踪它在哪里位置明智?
我相信它会返回到调用的foreach循环,但在再次调用时继续进行下一次迭代?
简而言之,该方法中的代码被重写为一个状态机,它可以像您怀疑的那样执行:它会跟踪它在循环中的位置,返回给调用者并继续停止。
在C#中, yield
非常特殊,因为它没有遵循正常的控制流程。
迭代返回的IEnumerable
, BreakBytes
函数将被调用并运行,直到它产生一个值。 控制权将被传回给foreach
循环。 当循环步进到下一个项目时, BreakBytes
被恢复并运行,直到它达到另一个yield
。
这个有点奇怪的构造给出的好处是,如果只枚举IEnumerable
一部分,则只需要生成该部分。
Jon Skeet可以告诉你关于它们的所有信息:http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx
是。 它跟踪其内部状态。
链接地址: http://www.djcxy.com/p/9093.html上一篇: When writing an enumerable, what does yield return var?