各フェーズに入力と出力があり、フェーズ 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... */
  });
ジェネリックでこれを行うためのタイプセーフな方法はありますか? または、私が検討すべき設計の代替案を誰かが持っていますか? リフレクションを使用してチェーニングを行うことや、オブジェクトを入力と出力に使用することは想像できますが、もっと良い方法があることを願っていました。