C# - 在参数中声明方法(委托)

4
在下面的代码中,我将B方法作为一个操作传递给IterateObjects方法中的对象。我想问一下是否可以在参数中显式声明方法,而不是通过名称传递它,就像这样:
a.IterateObjects(delegate void(string s){//method body}) 它是不正确的,但我确信我见过这样的东西可以工作。请问您能否提供建议?谢谢。
DelTest a = new DelTest(); //class with method IterateObjects
a.IterateObjects(B) //HERE

private void B(string a)
{
    listBox1.Items.Add(a);
}

//another class  ....

public void IterateObjects(Action<string> akce)
{
    foreach(string a in list)
    {
        akce(a);
    }
}
4个回答

3

是的,您可以像这样使用lambda

a.IterateObjects ( x => listBox1.Items.Add(x) );

1

是的,这就是在C# 2中实现它的方法。 - Mongus Pong
嗯,但为什么使用Action<T>不起作用呢?IterateObjects在不同的类中,因此我想使用Action作为参数传递到这里。 - Petr
你可以这样声明你的操作:IterateObjects(new Action<string>(delegate(string a){/做一些事情/})); - remi bourgarel

0
你可以使用Lambda表达式:
a.IterateObjects((string s) => listBox1.Items.Add(s))

0

你可以通过lambda表达式在调用时将函数B声明为匿名函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接