我正在编写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中显示的对象。然后我循环遍历这些相同的对象以检查字符串是否出现。
感谢。
答案 0 :(得分:3)
这在很大程度上取决于你想做什么。例如,如果使用FirstOrDefault(p => ....)
,yield方法可以更快,因为不需要将所有内容存储到列表中,如果第一个元素是正确的,则list方法有一些开销(当然yield方法有还有开销但正如我所说的那样取决于。)
如果你想反复遍历数据,那么你应该使用列表。
答案 1 :(得分:1)
这取决于很多事情。
以下是使用IEnumerable<T>
而不是List<T>
的一些原因:
FirstOrDefault
,Any
,Take
等。)。ToList()
(例如Fibonacci系列)。如果您不应使用IEnumerable<T>
而不是List<T>
: