// разбор ошибок:
//допустим в очереди 20 элементов
for (int i = 0; i < 20; i++)
{
// в условии ты извлекаешь элемент и тут же добавляешь его в список еще до проверки на ноль, т.е. уже в очереди на 1 элемент меньше
// затем метод Add у списка возвращает индекс добавленного элемента, а не сам элемент. И ты этот индекс сравниваешь с нулем.
if (second.Add(input.Dequeue()) >= 0)
{
// начиная со второй итерации цикла этот код будет выполняться, т.к. индекс будет всегда > 0.
// и тут ты еще раз извлекаешь элемент из очереди и суешь в список.
second.Add(input.Dequeue());
}
else
{
// тут тоже произойдет извлечение элемента, только на первой итерации цикла.
input.Dequeue();
}
}
// итого: на каждой 2+ итерации ты извлекаешь элементы по 2 раза, на 1ой итерации - 3 раза
// а в очереди у тебя всего 20 элементов, а не 41.
// код по сути должен вообще упасть на Dequeue из пустой очереди
// рабочий вариант:
List<int> second = new List<int>();
// пока очередь не пуста
while (input.Count != 0)
{
int item = input.Dequeue();
if (item >= 0)
{
second.Add(item);
}
}
return second.ToArray();