2014-03-06 54 views
0

我有一類以下模式:閉包:分配一個字段到本地捕獲哪個值?

Foo m_currentFoo; 

void ReplaceFooWithDelayedDestruction() { 
    Dispatcher.BeginInvoke(() => { 
     var oldFoo = m_currentFoo; 
     Destroy(oldFoo); 
    } 
    m_currentFoo = new Foo(); 
} 

我的問題是,當執行拉姆達(ReplaceFoo ...返回之後大概),將oldFoo實際上是指對所傳的價值BeginInvoke,還是m_currentFoo的新值?

+0

你實際上正在捕獲'this'。 – SLaks

回答

1

爲了在覆蓋之前正確捕獲當前的foo,你應該在你的封閉函數中使用一個局部變量,否則你會冒着讓你的舊foo掛在身邊的風險,而是摧毀你新創建的foo。

Foo m_currentFoo; 

void ReplaceFooWithDelayedDestruction() 
{ 
    var oldFoo = m_currentFoo; 

    Dispatcher.BeginInvoke(() => { Destroy(oldFoo); }); 

    m_currentFoo = new Foo(); 
} 
+0

啊,沒錯,我對當地必須去的地方感到困惑。這是完全意義上的。 – Asik

相關問題