Одномерный динамический массив C#

Имеется вот такая задача:

Случайные числа в диапазоне от -5 до 5 разложить по двум массивам: в одни помещать только положительные, во второй - только отрицательные. Числа, равные нулю, игнорировать. Вывести на экран все сгенерированные случайные числа и элементы обоих массивов.

Не могу разобраться в чем ошибка и правильно ли я вообще делаю

int p = 1;
int n = 1;
for(int i = 0; i < 20; i++)
{
    int[] poloz = new int[p];
    int[] otric = new int[n];

    int ch = Random();
    if (ch > 0)
    {
        poloz[p - 1] = ch;
        p++;
    }
    else if (ch < 0)
    {
        otric[n - 1] = ch;
        n++;
    }
}

Ответы (2 шт):

Автор решения: Артём Оконечников

Думаю, стоит поместить массивы вне тела цикла и задать им размер. Если нужен именно массив, то вариант только изменять ему размер на каждое добавление. Внутри Array.Resize выделение массива нового размера и копирование:

int p = 1;
int n = 1;

int[] poloz = new int[0];
int[] otric = new int[0];

for (int i = 0; i < 20; i++)
{
    int ch = Random();
    if (ch > 0)
    {
        Array.Resize(ref poloz, p);
        poloz[p - 1] = ch;
        p++;
    }
    else if (ch < 0)
    {
        Array.Resize(ref otric, n);
        otric[n - 1] = ch;
        n++;
    }
}
→ Ссылка
Автор решения: dgzargo

ты хочешь использовать динамический массив, но в C# на самом деле такого нет.
есть только структуры данных которые похожи на динамический массив

var poloz = new List<int>(15);
var otric = new List<int>(15);
for(int i = 0; i < 20; i++)
{
    int ch = Random();
    if (ch > 0)
    {
        poloz.Add(ch);
    }
    else if (ch < 0)
    {
        otric.Add(ch);
    }
}

у класса List есть метод Count - он и есть твой "динамический" размер массива

→ Ссылка