Tag: 迭代器的

有些有助于理解“收益”

在我永恒的追求吮less我试图理解“收益”的声明,但我不断遇到同样的错误。 [someMethod]的主体不能是迭代器块,因为“System.Collections.Generic.List <AClass>”不是迭代器接口types。 这是我卡住的代码: foreach (XElement header in headersXml.Root.Elements()){ yield return (ParseHeader(header)); } 我究竟做错了什么? 我不能在迭代器中使用yield吗? 那有什么意义呢? 在这个例子中,它表示List<ProductMixHeader>不是一个迭代器接口types。 ProductMixHeader是一个自定义的类,但我想象List是一个迭代器接口types,不是? – 编辑 – 感谢所有的快速答案。 我知道这个问题并不是全新的,同样的资源不断涌现。 事实certificate,我想我可以返回List<AClass>作为返回types,但由于List<T>不懒,它不能。 改变我的返回types为IEnumerable<T>解决了这个问题:D 一个有点相关的问题(不值得打开一个新的线程):是否值得给IEnumerable<T>作为返回types,如果我确定99%的情况下我要去.ToList()呢? 性能影响是什么?

C#:foreach中的yield返回失败 – body不能是一个迭代器块

考虑这一点混淆的代码。 其目的是通过匿名构造函数即时创build一个新对象,并yield return它。 目标是避免维护一个本地集合只是为了简单地return它。 public static List<DesktopComputer> BuildComputerAssets() { List<string> idTags = GetComputerIdTags(); foreach (var pcTag in idTags) { yield return new DesktopComputer() {AssetTag= pcTag , Description = "PC " + pcTag , AcquireDate = DateTime.Now }; } } 不幸的是,这段代码产生了一个exception: 错误28“Foo.BuildComputerAssets()”的主体不能是迭代器块,因为“System.Collections.Generic.List”不是迭代器接口types 问题 这个错误信息是什么意思? 我怎样才能避免这个错误,并正确使用yield return ?

end iterator是否可移植性递减?

刚刚在我公司的源代码中遇到了end()迭代器的递减,这对我来说看起来很奇怪。 据我记忆,这是在一些平台上工作,但不为其他人。 也许我错了,但是我找不到任何有用的标准。 标准只说end()返回一个迭代器,它是过去的最终值,但是它保证是可减less的? 这样的代码如何符合标准? std::list<int>::iterator it = –l.end(); 提前致谢。