Консоль выводит только половину от того, что должна вывести

У меня есть некий метод:

private static void DecodeMessage(string[] lines)
    {
        string text = string.Empty, result = string.Empty;
        for (int i = lines.Length; i != 0; i--)
            text += String.Format($"{lines[--i]} ");

        string[] words = text.Split(' ');

        for (int c = 0; c < words.Length; c++)
        {
            Console.WriteLine($"[{c}] — {words[c]}");
        }
    }

В параметры метода DecodeMessage передаётся массив, хранящий в себе:

{"решИла нЕ Упрощать и зашифРОВАтЬ Все послаНИЕ", "дАже не Старайся нИЧЕГО у тЕбя нЕ получится с расшифРОВкой", "Сдавайся НЕ твоего ума Ты не споСОбЕн Но может быть", "если особенно упорно подойдешь к делу", "", "будет Трудно конечнО", "Код ведЬ не из простых", "очень ХОРОШИЙ код", "то у тебя все получится", "и я буДу Писать тЕбЕ еще", "", "чао"}

По какой-то причине при запуске программы без отладчика (Ctrl+F5) на консоль выводит только половину. А при запуске программы с отладчиком, делая по одному шагу, на консоль выводится всё правильно.

введите сюда описание изображения

В чём суть сей проблемы?


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

Автор решения: CrazyElf
        for (int i = lines.Length; i != 0; i--)
                                           ^^^ один
            text += String.Format($"{lines[--i]} ");
                                           ^^^ два

Вы два раза декрементируете переменную цикла i - один раз в конструкции цикла for и другой раз уже внутри цикла. Поэтому вы проскакиваете половину значений.

→ Ссылка
Автор решения: aepot

С отладчиком тоже не работает, либо, быть может вы отлаживаете не последнюю версию кода. Пересоберите проект, перезапустите студию, кроме шуток - иногда и это помогает.

Ну и как уже замечено, вы декрементируете счетчик дважды. Но я бы написал проще.

private static void DecodeMessage(string[] lines)
{
    string text = string.Join(" ", lines.Reverse());

    string[] words = text.Split();

    for (int c = 0; c < words.Length; c++)
    {
        Console.WriteLine($"[{c}] — {words[c]}");
    }
}
→ Ссылка