2014-09-03 3 views
1

Я следующий кодстранное поведение целых

int a = 1, n = 1; 

Convert.ToInt32(a = a++ + n--); 

Console.WriteLine("a: " + a + " n : " + n); 

//If you debug the second line of the code in quick watch the answer is 3. 

Ответ на приведенный выше код должен быть 2, так оно и есть. Но если я отлаживаю его и вижу значение в quickwatch, то печатается значение a. Любая идея, почему один и тот же код выводит два разных значения.

+1

Показаны 2 для меня. – Partha

+0

@Partha отлаживает его и видит значение в быстрых часах, а затем его 3 –

+1

, что мое наблюдение, точка останова на линии попадает прежде, чем код на этой строке будет выполнен. Вы должны нажать F10 на клавиатуре, чтобы выполнить строку кода, а затем увидите, что переменная содержит ожидаемое значение. –

ответ

0

Также обратите внимание, что операторы приращения/декремента, возвращающие переменные, будут выполняться после использования переменной в вычислении (но до того, как результат будет записан в a).

Это будет интерпретироваться как = 1 + 1, а не течет = 2 + 0

Specifcally программка:

Возьмите 1 из 'а' в расчет памяти.

Increment 'а' 1

взять 1 из 'N' в расчет памяти

декремент 'п' 1

Set 'а' на сумму двух значений, извлеченные ранее (а не текущие значения этих переменных) Часто ввод отдельных шагов в отдельные строки может дать намного лучшую отладку. то есть:

Смежные вопросы