For the ?
to work the compiler needs an explicit type for at least one of the operands. You can provide one here via a cast operator
(a ? (Action<T1,T2,T3,T4>)f1 : f2)(a, long, parameter, list);
Replace T*
with the actual types of the delegate parameters