Different versions of the Operate method
You can try to extract the common piece of code into a helper method:
private static Either&lt;ErrorList, TResult&gt; Operate&lt;TResult&gt;(ErrorList[] errorLists, Either&lt;ErrorList, TResult&gt; success)
{
    var errorList = errorLists
        .SelectMany(x =&gt; x.ToEnumerable())
        .Aggregate((x, y) =&gt; new ErrorList(x.Concat(y)));

    return success.ValueOr(() =&gt; errorList);
}

Then you can reduce the overloads' body only to calculate the helpers inputs:
public static Either&lt;ErrorList, TResult&gt; Operate&lt;T1, T2, T3, T4, T5, TResult&gt;(
    Either&lt;ErrorList, T1&gt; a, Either&lt;ErrorList, T2&gt; b, Either&lt;ErrorList, T3&gt; c, Either&lt;ErrorList, T4&gt; d, Either&lt;ErrorList, T5&gt; e,
    Func&lt;T1, T2, T3, T4, T5, Either&lt;ErrorList, TResult&gt;&gt; onSuccess)
  =&gt; Operate&lt;TResult&gt;(
    new [] { a.LeftValue, b.LeftValue, c.LeftValue, d.LeftValue, e.LeftValue },
    onSuccess(a.RightValue, b.RightValue, c.RightValue, d.RightValue, e.RightValue));