Недавно я столкнулся с неприятной ошибкой, и упрощенный код выглядит следующим образом:
int x = 0;
x += Increment(ref x);
...
private int Increment(ref int parameter) {
parameter += 1;
return 1;
}
Значение x после вызова Increment равно 1! Это было легко исправить, как только я узнал, что происходит. Я присвоил возвращаемое значение временной переменной, а затем обновил x. Мне было интересно, что объясняет этот вопрос. Это что-то в спецификации или в каком-то аспекте С#, который я пропускаю.