ho il seguente codice:C# - funzioni anonime e gestori di eventi
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;
}
Notate come posso registrare il mio membro evento (FoundStep) per funzione locale sul posto anonimo.
La mia domanda è: quando termina la funzione 'FindStepByType' - la funzione anonima verrà rimossa automaticamente dalla lista dei delegati dell'evento o devo rimuoverla manualmente prima di uscire dalla funzione? (e come faccio?)
Spero che la mia domanda sia stata chiara.
Non è lo stesso che usare i predicati? Quando uso i predicati non libero il delegato del predicato. –
I predicati non vengono salvati da nessuna parte, ma qui, ci si iscrive a un evento. Finché l'oggetto che contiene l'evento è vivo, manterrà un riferimento al delegato e indirettamente alle sue variabili. Quando passi, ad esempio, '.Where (x => x.Hidden)', il metodo farà il lavoro con esso e lo getterà via (è solo una variabile locale per quanto riguarda il metodo 'Where'. Questo non è vero per il tuo caso, inoltre, se "Dove" è stato memorizzato da qualche parte, dovresti esserti preoccupato anche di questo. –