У вас есть несколько вариантов, один из которых - определить делегата, который будет выглядеть так:
public delegate TResult Func<T1,T2,...,TN,TResult>(T1 arg1, T2 arg2,...,TN argN);
вы можете определить его для любого количества аргументов (больше 4, так как в противном случае вы можете получить конфликт имен)
или вы можете заключить свои аргументы в какую-то структуру, чтобы вы могли использовать один из делегатов Func, уже определенных для вас.
В любом случае вам следует беспокоиться о сигнатуре метода, если вы не можете использовать один из предопределенных делегатов Func. Довольно часто длинные списки параметров - это запах, который часто приводит вас к осознанию того, что метод выполняет большую (не связанную) работу.
Мой личный подход, таким образом, заключался бы в том, чтобы выяснить, где произошел сбой в проекте, и исправить его, а не исправить то, что чаще всего является симптомом (в этом случае определение Func с достаточным количеством компоновок может исправить симптом не говоря, что это потому, что я не знаю твой код)