各フェーズに入力と出力があり、フェーズ 1 の出力がフェーズ 2 の入力になるように連鎖できる一連の「フェーズ」C# をモデル化しようとしています。これですが、???の代わりに何を使用すればよいかわかりませんでした。
public class Phase<TInput, TOutput>
{
private Phase<???, TInput> prerequisite;
public Phase(Phase<???, TInput> prereq, Func<TInput, TOutput> work)
{
/* ... */
}
}
私が最終的にやろうとしているのは、次のような一連のステップを連鎖させることです (「追加」メソッドは、フェーズを作成するのに役立つ便利なメソッドです)。
var p1 = AddInitialPhase(() =>
{
int a = /* some initial result */;
return a;
});
var p2 = AddPhase(p1, (result) =>
{
string b = /* do something with result from p1 */
return b;
});
var p3 = AddPhase(p2, (result) =>
{
/* etc... */
});
ジェネリックでこれを行うためのタイプセーフな方法はありますか? または、私が検討すべき設計の代替案を誰かが持っていますか? リフレクションを使用してチェーニングを行うことや、オブジェクトを入力と出力に使用することは想像できますが、もっと良い方法があることを願っていました。