C# 闭包:将字段分配给本地捕获哪个值?
我在课堂上有以下模式:C# 闭包:将字段分配给本地捕获哪个值?,c#,lambda,closures,C#,Lambda,Closures,我在课堂上有以下模式: Foo m_currentFoo; void ReplaceFooWithDelayedDestruction() { Dispatcher.BeginInvoke(() => { var oldFoo = m_currentFoo; Destroy(oldFoo); } m_currentFoo = new Foo(); } 我的问题是,当lambda被执行时(大概是在ReplaceFoo…返回之后),o
Foo m_currentFoo;
void ReplaceFooWithDelayedDestruction() {
Dispatcher.BeginInvoke(() => {
var oldFoo = m_currentFoo;
Destroy(oldFoo);
}
m_currentFoo = new Foo();
}
我的问题是,当lambda被执行时(大概是在ReplaceFoo…返回之后),oldFoo实际上是指在BeginInvoke上传入的值,还是指m_currentFoo的新值?要在覆盖当前foo之前正确捕获它,应该在封闭函数中使用局部变量,否则,您将面临旧foo挂起的风险,而不是销毁新创建的foo
Foo m_currentFoo;
void ReplaceFooWithDelayedDestruction()
{
var oldFoo = m_currentFoo;
Dispatcher.BeginInvoke(() => { Destroy(oldFoo); } );
m_currentFoo = new Foo();
}
你实际上是在捕捉这个。啊,没错,我不知道本地人要去哪里。这完全有道理。