我正在創建一個匿名方法並將其傳遞給稍後調用的操作。我想將一些數字數據(int
)傳遞給我的匿名方法。爲了通過價值傳遞數據,我是否需要創建副本?或者,數據是否會按價值傳遞?傳遞給動作的匿名方法是否通過值或引用獲取數據?
以下是我認爲實現會是什麼樣子,如果我不得不創建副本:
private void CreateAction()
{
int bus = 4;
CustomObject[] data = new object[16];
int length = 1500;
this.doWorkLater = new Action(() =>
{
var busCopy = bus;
var dataCopy = data;
var lengthCopy = length;
this.WorkMethod(busCopy, dataCopy, lengthCopy);
});
}
是必要的這個(上面的代碼),以獲得length
和bus
的價值?
在這種情況下,將CustomObject[] data
(某些類創建的)通過引用或值傳遞?
變量被捕獲,而不是值。由於這些變量對於方法來說是本地的,所以您不需要複製它們,因爲沒有其他可以修改它們的方法。 – Lee
在這個筆記上的一個很好的解讀是[Eric Lippert - 關閉被認爲有害的循環變量](https://blogs.msdn.microsoft.com/ericlippert/2009/11/12/closing-over-the-loop-variable -considered有害/)。 –