我有以下代码:C# - 匿名函数和事件处理
public List<IWFResourceInstance> FindStepsByType(IWFResource res)
{
List<IWFResourceInstance> retval = new List<IWFResourceInstance>();
this.FoundStep += delegate(object sender, WalkerStepEventArgs e)
{
if (e.Step.ResourceType == res) retval.Add(e.Step);
};
this.Start();
return retval;
}
通知我如何注册我的事件成员(FoundStep)到当地就地匿名函数。
我的问题是:当函数'FindStepByType'将结束 - 将匿名函数从事件的委托列表中自动删除,或者我必须在执行该函数之前手动删除它? (以及我该怎么做?)
我希望我的问题很清楚。
是不是就像使用谓词一样?当我使用谓词时,我不释放谓词委托。 – 2009-09-07 14:02:32
谓词不保存在任何地方,但在这里,您正在订阅一个事件。只要包含该事件的对象处于活动状态,它就会持有对您的委托的引用,并间接对其变量进行引用。当你通过'.Where(x => x.Hidden)'来传递某个方法时,该方法将对它进行处理并将其扔掉(就'Where'方法而言,它只是一个局部变量。这不适用于你的情况。另外,如果'Where'存储在某个地方,你也应该担心这一点。 – 2009-09-07 14:05:49