我遇到了以下问题:(c#)
有一些类(IRC bot),它有方法,需要完成某些事件的结果(通过它可能是异步的)。
也许不清楚:
// simplified
class IRC
{
void DoSomeCommand()
{
OnListOfPeopleEvent += new Delegate(EventData e) {
if (e.IsForMe)
{
ReturnToUserSomeData();
// THIS IS WHAT I NEED
OnListOfPeopleEvent -= THIS DELEGATE;
}
}
TakeListOfPeopleFromIrc();
}
}
我希望在功能完成时删除该委托。有没有办法如何在它自身中获得对闭包的引用?
答案 0 :(得分:4)
您可以使用捕获自身的cheaky变量来执行此操作;-p
SomeDelegateType delegateInstance = null;
delegateInstance = delegate {
...
obj.SomeEvent -= delegateInstance;
};
obj.SomeEvent += delegateInstance;
需要null
的第一行才能满足明确的任务;但是你可以在anon-method中捕获这个变量。