【发布时间】:2017-12-01 14:39:40
【问题描述】:
我希望对我最近在调试器中逐步完成但无法真正理解的 sn-p 得到一些澄清。
我正在参加关于 PluralSight 的 C# 课程,当前主题是 yield 并返回带有关键字的 IEnumerable<T>。
我有这个过于基本的函数,它返回 Vendors 的 IEnumerable 集合(一个简单的类,包含 Id、CompanyName 和 Email):
public IEnumerable<Vendor> RetrieveWithIterator()
{
this.Retrieve(); // <-- I've got a breakpoint here
foreach(var vendor in _vendors)
{
Debug.WriteLine($"Vendor Id: {vendor.VendorId}");
yield return vendor;
}
}
我在一个单元测试中得到了这段代码,我用它来测试这个函数:
var vendorIterator = repository.RetrieveWithIterator(); // <-- Why don't it enter function?
foreach (var item in vendorIterator) // <-- But starts here?
{
Debug.WriteLine(item);
}
var actual = vendorIterator.ToList();
我真的无法理解,而且我相信很多初学者都遇到了同样的问题,就是为什么对 RetrieveWithIterator 的初始调用没有启动函数,而是在我们开始迭代其返回的IEnumerable 集合(参见 cmets)。
【问题讨论】:
-
yield 是关于延迟执行(流式)
-
干杯。你有什么好的、易于理解的资料可供我阅读吗?我很想用它来编辑问题,因为我确信其他人可能会遇到和我一样的麻烦
-
Another example 的迭代器被剖析,并引用了标准。
-
我们称之为延迟和延迟执行,见stackoverflow.com/questions/2515796/…
标签: c# .net yield yield-return