Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-在参数(委托)中声明方法_C#_Delegates_Action - Fatal编程技术网

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

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

在下面的代码中,我将方法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);
    }
}
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);
        }
    }