【发布时间】:2012-01-03 08:35:47
【问题描述】:
这是“你可以通过多种方式做到这一点”的问题之一。考虑以下代码:
protected virtual IEnumerable<ScriptReference> GetScriptReferences()
{
ScriptReference referece = new ScriptReference();
referece.Assembly = "FeyenoordEnabled";
referece.Name = "FeyenoordEnabled.PassTextBox.js";
return new ScriptReference[] { referece };
}
protected virtual IEnumerable<ScriptReference> GetScriptReferences()
{
ScriptReference referece = new ScriptReference();
referece.Assembly = "FeyenoordEnabled";
referece.Name = "FeyenoordEnabled.PassTextBox.js";
yield return referece;
}
我只需要退回 一个 项。第一段代码返回一个包含单个项目的数组,第二个代码产生该项目。 什么更好,为什么?
【问题讨论】:
-
肯定不可能比第一个
return更有效率吗? -
你也可以
return Enumerable.Repeat(reference, 1);虽然这归结为yield return在封面下...... -
我会注意到
yield的另一个用途:创建一个生成的、无休止的 IEnumerable(例如,斐波那契序列生成器)。如果您要这样做,您必须小心不要尝试循环遍历整个 IEnumerable。但是,有趣的是,我可以告诉您,出于性能原因,我会避免使用yield return。似乎其他人正在确认这种做法。
标签: c# .net ienumerable yield