代表参考本身

时间:2011-09-08 21:02:56

标签: c# delegates

委托有没有办法引用自己?我正在寻找一种方法:

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

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

2 个答案:

答案 0 :(得分:14)

我不确定你要做什么,但代表可以像这样引用自己:

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

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

    foos.Add(del);
}

答案 1 :(得分:2)

一种方法是委托接受自己的论证:

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);