Сама ссылка на делегат - PullRequest
       4

Сама ссылка на делегат

5 голосов
/ 09 сентября 2011

Может ли делегат ссылаться на себя?Я ищу способ сделать это:

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

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

Ответы [ 2 ]

14 голосов
/ 09 сентября 2011

Я не совсем уверен, что вы пытаетесь сделать, но делегат может ссылаться на себя так:

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

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

    foos.Add(del);
}
2 голосов
/ 09 сентября 2011

Один из способов для делегата - принять аргумент для себя:

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

Другой способ - закрыть переменную, ссылающуюся на себя:

Foo foo;
foo = delegate() { list.Remove(foo);}
list.Add(foo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...