我知道您特别说过no recursion,但我假设这是因为您希望能够在层次结构的下降过程中调用不同的函数/方法。
那么,如果您可以递归调用相同的函数,但让该函数依次使用委托调用各种其他函数,那会怎样?是否可以传递要调用的委托函数列表,以及条件的另一个委托列表(是否继续循环)?
我只花了几分钟的时间,这是一种抽象的想法/思想实验,而不是具体的解决方案;我什至不确定这是否可能,但这应该显示基本概念:
public delegate void CallableFunctionDelegate();
public delegate bool CallableCondition();
public void CallDelegatesRecursively(
List<CallableFunctionDelegate> methodsToCall,
List<CallableCondition> conditionsToCall){
var currentDelegate = delegatesToCall[0];
while(conditionsToCall()){
currentDelegate(); // Call current function
// (Verify that the list is not empty, etc...)
var restOfList = methodsToCall.GetRange(1, methodsToCall.length);
var restOfConditions =
conditionsToCall.GetRange(1, conditionsToCall.length);
// Call next function in the "hierarchy" / list:
CallDelegatesRecursively(restOfList, restOfConditions);
}
}
现在它应该(理论上!;))可以调用该函数,并将函数列表传递给它F
,只要某些相应的条件C
评估为真,每个函数都可以在 while 循环中调用。在每次调用 之后,还将调用F
一些“子函数” (列表中的下一个)(但前提是它的相应条件在递归调用中计算为真......)。F2
C2