Зависит от случая. Я использовал params в тех случаях, когда у меня есть переменное число аргументов, и это значительно повышает удобочитаемость вызывающего кода.
Например, у меня есть класс, который представляет документ TIFF и позволяет получить доступ к коллекции страниц, которая может быть переупорядочена и перемежена с другими документами TIFF. Поскольку одной из наиболее распространенных задач, которые хотят получить наши клиенты, является возможность легко объединять несколько документов TIFF в один, мы также предоставляем следующие два служебных метода:
public static void Combine(Stream output, params Stream[] sources) { /* ... */ }
public static void Combine(Stream output, params string[] sourceFiles) { /* ... */ }
, которые при использовании делают клиентский код действительно приятным:
using (FileStream output = new FileStream(outputPath, FileMode.Create)) {
TiffDocument.Combine(output, tpsCoverSheetPath, mainDocumentPath, tpsTrailerPath);
}