Цикл for в C# и вычисление условий.

Рейтинг: 1Ответов: 1Опубликовано: 09.05.2011

Есть функция вида:

string MyFunc(string input)
{
    for (int i = 0; i < input.Lenght; i++)
    {
        //разнообразные вычисления, например такие:
        input = input.Replace("bla", "bla1");
        //а здесь рекурсивный вызов:
        input = MyFunc(input);    
    }
}

Внутри выполнился выход за приделы строки. То есть в условии:

if (input[i] == 'b')

Собственно вопрос: Для цикла for, запись i < input.Lenght вычисляется один раз? Получается, что строка input уменьшается, а (i < input.Lenght) остается const? И сразу как бы этого избежать?

Ответы

▲ 3Принят

Скорее всего, проблема в том, что Вы пытаетесь обратиться к строке по индексу ПОСЛЕ рекурсивного вызова. Когда строка уже укорочена рекурсивным вызовом, а в текущем вызове i < input.Length отработало для предыдущей длины строки.