このコードにより、ユーザーはパラメーターとその値を設定できます。値は、別のパラメータへの参照である場合があります。
Parameter.Set("Parameter1", "%Parameter2%");
Parameter.Set("Parameter2", "%Parameter1%");
この値の実際の解決では、Regex クラスの Replace メソッドを使用して、% 記号内のすべての参照を再帰的に解決し、それらを置き換えます。
// Pseudo code (the actual parameter name is retrieved and replaced with its value.
Regex.Replace("%Parameter1%", match => Parameter.Get(match));
この場合、循環参照により StackOverflowException が発生します。
どうすればこれを回避できますか? (循環参照が検出された場合 - 何らかの方法で例外/ハンドルをスローします)
提案された実装は、現在の解決実行で既に検索された用語のリストを保持することでした (「検索履歴」)。
各ステップで、現在検索されているパラメーターが履歴にあるかどうかを確認します。履歴にある場合は、既に確認済みであり、循環している必要があります。
このアプローチの欠点は、無駄が多いことです (発生するパラメーター解決ごとに新しいリストを割り当てます)。