委托有没有办法引用自己?我正在寻找一种方法:
delegate void Foo();
list<Foo> foos;
void test() {
list.Add(delegate() {
list.Remove(/* this delegate */);
});
}
答案 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);