在" 我如何仅公开IList的片段<>问题"中,其中一个答案包含以下代码段:
IEnumerable<object> FilteredList()
{
foreach(object item in FullList)
{
if(IsItemInPartialList(item))
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
yield关键字有什么作用?我已经看到它在几个地方被引用,另外一个问题,但我还没弄清楚它实际上做了什么.我习惯于在一个线程产生另一个线程的意义上考虑收益率,但这似乎并不重要.
在我不断追求吸吮的过程中,我试图理解"收益"陈述,但我一直遇到同样的错误.
[someMethod]的主体不能是迭代器块,因为'System.Collections.Generic.List <AClass>'不是迭代器接口类型.
这是我遇到的代码:
foreach (XElement header in headersXml.Root.Elements()){
yield return (ParseHeader(header));
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我不能在迭代器中使用yield吗?那有什么意义呢?在这个例子中,它说它List<ProductMixHeader>不是迭代器接口类型.
ProductMixHeader是一个自定义类,但我想List是一个迭代器接口类型,不是吗?
- 编辑 -
感谢所有快速解答.
我知道这个问题不是全新的,同样的资源不断涌现.
事实证明我认为我可以List<AClass>作为返回类型返回,但由于List<T>不是懒惰,它不能.更改我的返回类型以IEnumerable<T>解决问题:D
一个有点相关的问题(不值得打开一个新线程):IEnumerable<T>如果我确定99%的情况我将要去.ToList(),它是否值得作为返回类型给出?性能影响是什么?
是yield return用于实现快捷方式IEnumerable和IEnumerator?