【发布时间】:2011-02-13 22:10:27
【问题描述】:
打破循环的最佳做法是什么? 我的想法是:
Child Find(Parent parent, object criteria)
{
Child child = null;
foreach(Child wannabe in parent.Childs)
{
if (wannabe.Match(criteria))
{
child = wannabe;
}
else
{
child = Find(wannabe, criteria);
}
if (child != null) break;
}
return child;
}
或
Child Find(Parent parent, object criteria)
{
Child child = null;
var conditionator = from c in parent.Childs where child != null select c;
foreach(Child wannabe in conditionator)
{
if (wannabe.Match(criteria))
{
child = wannabe;
}
else
{
child = Find(wannabe, criteria);
}
}
return child;
}
或
Child Find(Parent parent, object criteria)
{
Child child = null;
var enumerator = parent.Childs.GetEnumerator();
while(child != null && enumerator.MoveNext())
{
if (enumerator.Current.Match(criteria))
{
child = wannabe;
}
else
{
child = Find(wannabe, criteria);
}
}
return child;
}
你怎么看,有更好的主意吗? 我正在寻找最好的解决方案:D
莫
【问题讨论】:
-
这需要在哪个版本的 .NET/C# 中工作?
-
您在所有示例中都递归调用 Find,这是否意味着 Child 继承自 Parent?
-
它只是伪代码 :) 让我们想象一个接口 IFinder :)
标签: c# .net recursion conditional