这是一个典型的“有多种实现方式”的问题。考虑下面的代码:
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
已经非常高效了,不可能再更高效了吧? - Jamesreturn Enumerable.Repeat(reference, 1);
,但这实际上是在内部使用了yield return
... - James Michael Hareyield
的方法:创建一个生成的、无限的 IEnumerable(比如,一个斐波那契数列生成器)。如果你要这样做,就要小心不要尝试循环遍历整个 IEnumerable。但是,从经验上讲,我可以告诉你,出于性能原因,我在合理的情况下尽量避免使用yield return
。似乎其他人也证实了这种做法。 - Andrew