stackoverflow.com/questions/5438307/...
вая следующий (сильно отредактированный, псевдо-) код:
int count = 0;
thing.Stub(m => m.AddBlah()).WhenCalled(o => count++);
thing.Stub(m => m.RemoveBlah()).WhenCalled(o => count--);
DoStuff(thing);
Assert.AreEqual(1, count);
ReSharper выдает предупреждение на счет - «Доступ к измененному закрытию». Я понимаю, почему я получаю это предупреждение (переменная count изменяется в двух разных лямбдах и, вероятно, имеет нежелательную семантику), но я не понимаю рекомендации ReSharper: «Обернуть локальную переменную в массив». Если я позволю ReSharper сделать это, я получу:
int count[] = { 0 };
thing.Stub(m => m.AddBlah()).WhenCalled(o => count[0]++);
thing.Stub(m => m.RemoveBlah()).WhenCalled(o => count[0]--);
DoStuff(thing);
Assert.AreEqual(1, count[0]);
И без предупреждения.
Почему использование массива безопасно?