2011-09-08 10 views
5

Esiste un modo per un delegato di fare riferimento a se stesso? Sto cercando un modo per farlo:Riferimento del delegato stesso

delegate void Foo(); 
list<Foo> foos; 

void test() { 
    list.Add(delegate() { 
     list.Remove(/* this delegate */); 
    }); 
} 
+1

Che cosa stai cercando di ottenere con un simile costrutto? – Oded

+0

Non sono sicuro di aver capito la tua domanda? Vuoi solo rimuovere il delegato dalla tua lista 'foos'? –

+0

@Tony The Tiger: Sembra così. – BoltClock

risposta

13

non sono sicuro esattamente quello che stai cercando di fare, ma è possibile che un delegato di riferimento stesso come questo:

delegate void Foo(); 
List<Foo> foos = new List<Foo>(); 

void test() { 
    Foo del = null; 
    del = delegate { foos.Remove(del); }; 

    foos.Add(del); 
} 
2

Un modo è per il delegato di accettare un argomento per sé:

delegate void Foo(Foo self); 
... 
list.Add(delegate (Foo self) { list.Remove(self);}); 
... 
foreach (Foo f in list) f(f); 

Un altro modo sarebbe quello di chiudere più di un riferendosi variabile a se stesso :

Foo foo; 
foo = delegate() { list.Remove(foo);} 
list.Add(foo); 
Problemi correlati