Expression evaluators, with possible short circuit evaluation
If your code will always behave as the parts shown, you can refactor it to early-out returns. I show your Evaluate&lt;T1, T2, T3, TResult&gt;(...) as an example:

public static Response&lt;TResult&gt; Evaluate&lt;T1, T2, T3, TResult&gt;(Func&lt;Response&lt;T1&gt;&gt; func1, Func&lt;T1, Response&lt;T2&gt;&gt; func2, Func&lt;T2, Response&lt;T3&gt;&gt; func3, Func&lt;T3, Response&lt;TResult&gt;&gt; funcResult)
{
    var response = new Response&lt;TResult&gt;();

    if (!func1()) return response;
    if (!func2(true)) return response;
    if (!func3(true)) return response;
    return response.WithValue(funcResult(result3));
}


So you get rid of the nesting if statements. And you don't need the local flag variables since you know that the value is true.