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]);

И без предупреждения.

Почему использование массива безопасно?

Ответы на вопрос(2)

Ваш ответ на вопрос