2009-07-07 6 views
1

J'ai problème suivant: (C#)Accès objet « auto » dans la fermeture

Il y a une classe (bot IRC), qui a méthode, qui a besoin de résultat d'un événement pour complet (à travers elle pourrait être asynchrone).

Peut-être pas clair:

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

Et je veux supprimer ce délégué quand il la fonction est terminée. Y a-t-il un moyen d'obtenir la référence à la fermeture en elle-même?

Répondre

4

Vous pouvez le faire avec une variable cheaky qui se capture ;-P

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

La première ligne avec null est nécessaire pour répondre à l'affectation définitive; mais vous êtes autorisé à capturer cette variable à l'intérieur de la méthode anon.

+0

J'ai trouvé cette solution comme un hack, mais suffisante pour moi. Merci. (Le nettoyeur serait une solution qui ne dépend pas de la variable explicitement nommée :)) – nothrow

+0

Si vous ne nommez pas la variable, vous devrez nommer la méthode à la place, et gérer tout le transfert d'état ... –

Questions connexes