Я бы сказал, это действительно зависит от вашего случая. Ты что-то делаешь со всем набором? Например, проверить все элементы или объединить данные? В этом случае я бы передал IEnumerable в качестве единственного параметра.
Передача большого количества параметров может быть хорошим признаком плохого разделения интересов (т. Е. Ваш метод делает слишком много), но в этом случае кажется, что вы передаете четко определенный набор элементов для их итерации. каким-то образом. Учитывая синтаксис инициализатора коллекции в C # 3, я бы рекомендовал IEnumerable практически во всех случаях для списка параметров, который был бы чем-то вроде Type a, Type b, Type c...
.
Конечно, если ваши параметры действительно обрабатываются по-разному, то их разделение имеет смысл, но я бы рассмотрел, что вы делаете в этом случае. Простым случаем, который приходит на ум, будет построение древовидной структуры данных и наличие функции для создания дочерних элементов узла. Плохой синтаксис может быть:
Node BuildTree( Node parent, Node child1, Node child2...)
Я бы, наверное, занялся чем-то вроде:
void ConstructChildren( this Node parent, IEnumerable<Node> children)
Если вы можете предоставить больше информации о вашем случае, и о том, какую логику вы выполняете для параметров, вероятно, будет легче увидеть, является ли это хорошим кандидатом для свертывания или рефакторинга.