您能否解释一下示例 1 中采用的方法与示例 2 中的方法在性能上是否不同?如果是,哪个最有效,为什么。
我所说的“性能”不仅与执行速度有关。我还想要一些关于不同系统资源使用的解释。
1.
private IEnumerable<string> GetObjectsStrings(List<object> input)
{
IList<string> result = new List<string>();
foreach (var item in input)
{
result.Add(item.ToString());
}
return result;
}
2.
private IEnumerable<string> GetObjectsStrings(List<object> input)
{
foreach (var item in input)
{
yield return item.ToString();
}
}
请您参考如下方法:
在场景 1 中,您正在处理整个列表,然后通过 IEnumerable 接口(interface)返回该列表。无论调用者打算对返回的 IEnumerable 做什么,每次调用 GetObjectsStrings 时都会处理整个列表。
在场景 2 中,您只处理调用者所需的 input 列表中的条目。所以,您正在创建一个迭代器。
这是一个会产生影响的例子:
var temp = GetObjectsStrings(input).First();
场景 1:您每次都为每个这样的调用完整地处理 input。 场景 2:您只处理 input 中的第一项。然后,迭代完成。
