Q:

Можно ли передать в функцию неопределенное кол-во массивов?

Не нашёл в MSDN ответ именно на свой вопрос. 
Цель очень простая. У меня перед пакетом будут идти заголовки, возможно неопределенного содержания  (несколько типов, которую будут определяться вторыми 4 байтами заголовка) принимающая стороны будет реагировать на них по разному. А кол-во информации в заголовках будет разное. Можно просто написать разные функции, но вдруг универсальный вариант?
Есть функция(написанная не скомпилируется, очевидно), которая сможет компоновать массивы байт в один массив.
byte[] PackageBuilder(int mainPackageSize, params byte[] packageGroups)
{
    byte[] MainPackage = new byte[mainPackageSize];
    int inputPackageSize = 0;
    foreach (byte[] p in packageGroups)
    {
        p.CopyTo(MainPackage, inputPackageSize); //Добавление в начало массива, а потом с отступом за счет увеличения inputPackageSize.
        inputPackageSize += packageGroups.Length; // Повышаем отступ для записи.
    }
    return MainPackage;
}

Проблема в том, что элементы packageGroups компилятор видит, не как массив байтов, а как байты в отдельности, что логично и написано в документациях, не спорю. От чего foreach дает ошибку "Не удается преобразовать byte в byte[]". Как решить такую проблему? Можно ли как-то заслать в params byte[] несколько массивов?

A:

params byte[] будет принимать неопределенное число byte.
Чтобы принимать неопределенное число byte[] нужно объявить параметр params byte[][]:
byte[] PackageBuilder(int mainPackageSize, params byte[][] packageGroups)
...
//вызов
var package = PackageBuilder(1, new byte[]{1,2,3}, new byte[]{1,2})

