Учитывая следующий (сильно отредактированный, псевдо) код:
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 изменяется в двух разных lambdas и, вероятно, имеет нежелательную семантику), но я не понимаю совета ReSharper: "Wrap local variable in array". Если я разрешу 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]);
И никаких предупреждений.
Почему безопасный массив?