鑑於以下(大量編輯,僞)代碼:爲什麼resharper建議「在數組中包裝變量」來訪問修改後的閉包警告?
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的建議:「在數組中包裝局部變量」。如果我讓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]);
並沒有警告。
爲什麼使用數組安全?
您看到過哪個版本的ReSharper? –