我遇到以下问题:(c#)

有一些类(IRC机器人),它具有方法,需要某些事件的结果来完成(通过它可以是异步的)。

也许不清楚:

// simplified
class IRC
{
 void DoSomeCommand()
 {
  OnListOfPeopleEvent += new Delegate(EventData e) {
   if (e.IsForMe)
   {
    ReturnToUserSomeData();
    // THIS IS WHAT I NEED
    OnListOfPeopleEvent -= THIS DELEGATE;
   }
  }
  TakeListOfPeopleFromIrc();
 }
}


我想在功能完成后删除该委托。有什么方法可以获取封闭本身的引用吗?

最佳答案

您可以使用可捕获自身的笨拙变量来执行此操作; -p

SomeDelegateType delegateInstance = null;
delegateInstance = delegate {
    ...
    obj.SomeEvent -= delegateInstance;
};
obj.SomeEvent += delegateInstance;


必须使用带有null的第一行来满足确定的分配;但是您可以在匿名方法中捕获此变量。

09-12 19:54