【发布时间】:2015-10-08 13:29:15
【问题描述】:
我正在编写一个 C# 表单应用程序,想知道以下两个函数是否达到相同的结果:
public List<object> Method1(int parentId)
{
List<object> allChildren = new List<object>();
foreach (var item in list.Where(c => c.parentHtmlNodeForeignKey == parentId))
{
allChildren.Add(item);
allChildren.AddRange(Method1(item.id));
}
return allChildren;
}
public IEnumerable<object> Method2(int parentId)
{
foreach (var item in list.Where(c => c.parentHtmlNodeForeignKey == parentId))
{
yield return item;
foreach (var itemy in Method2(item.id))
{
yield return itemy;
}
}
}
我是否正确地说Method1 函数比Method2 更有效?
另外,是否可以将上述任一函数编码得更高效?
编辑
我正在使用该函数返回一些对象,然后将这些对象显示在 ListView 中。然后我遍历这些相同的对象以检查是否出现字符串。
谢谢。
【问题讨论】:
-
所有这些长名字很难阅读。
Method1、Method2怎么了? -
它们是如何被使用的?您是否多次迭代结果?您是否正在遍历所有的结果?
-
这取决于您如何使用该功能。 Yield 函数是按需执行的,因此对该函数的单次调用所需的运行时间比 List 函数要少(但您不会得到结果)。 Yield 函数需要构造迭代器对象的开销。所以如果你在 Yield 方法的结果上调用
ToList(),这可能比纯的List函数要慢。 -
公开
ListvsIEnumerable从来都不是效率问题,更多的是意图。如果您打算让某人拿走您的物品并从中添加或删除,List是您的最佳选择。如果您只想让某人对其进行迭代,IEnumerable就是为此的合同。
标签: c# list ienumerable