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);
}
}
これで (理論的には! ;)) その関数を呼び出して関数のリストを渡すことができるはずです。それぞれの関数は、対応する条件が true と評価さF
れる限り、while ループで呼び出されます。C
を呼び出すたびにF
、いくつかの「サブ関数」F2
(リスト内の次の関数) も呼び出されます (ただしC2
、再帰呼び出しで対応する条件が true と評価された場合のみ...)。