C#-在参数(委托)中声明方法
在下面的代码中,我将方法B作为操作传递给IterateObjects方法中的对象。 我想问一下,我是否可以在参数中显式声明方法,而不是通过名称传递方法,类似这样:C#-在参数(委托)中声明方法,c#,delegates,action,C#,Delegates,Action,在下面的代码中,我将方法B作为操作传递给IterateObjects方法中的对象。 我想问一下,我是否可以在参数中显式声明方法,而不是通过名称传递方法,类似这样: a.IterateObjects(delegate void(string s){//method body})这是不正确的,但我确信我看到过类似的情况。你能给我个建议吗?多谢各位 DelTest a = new DelTest(); //class with method IterateObjects a.IterateObject
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);
}
}
DelTest a=新的DelTest()//使用方法IterateObjects初始化
a、 迭代对象(B)//此处
私有无效B(字符串a)
{
列表框1.项目。添加(a);
}
//另一门课。。。。
公共无效迭代对象(操作akce)
{
foreach(列表中的字符串a)
{
akce(a);
}
}
是的,您可以使用类似的:
a.IterateObjects ( x => listBox1.Items.Add(x) );
您可以在调用时通过a将函数B声明为匿名函数。您可以使用lambda表达式:
a.IterateObjects((string s) => listBox1.Items.Add(s))
就是这样:)是的,这是C#2Hm中的方法,但为什么它不能与动作一起工作?IterateObjects在不同的类中,所以我想使用Action作为参数传递到这里。您可以像这样声明您的操作:IterateObjects(新操作(委托(字符串a){/*做某事*/}));
delegate void MyFunctionDelegate(string a);
public void Main()
{
iterateObjects (delegate(string a){/*do something*/});
}
public void IterateObjects(MyFunctionDelegate akce)
{
foreach(string a in list)
{
akce(a);
}
}