我对C#中的可选匿名函数感到困惑

时间:2014-07-18 20:19:07

标签: c# lambda delegates action anonymous-function

我编写了很多语言代码:JavaPHPC#JQuery仅举几例,但我只是公平到中等< / em>在C#中,我对如何使用匿名函数感到困惑。我看过很多关于Action<T>lambdadelegates的引用,但我不确定它们是什么以及它们如何重要:

我(但是)非常习惯JQuery,它就像这样:

function hello(fnc){
     console.log("Hello");
     if (typeof fnc === "function") fnc();
}
hello();                                       //prints "Hello"
hello(function () {console.log("World"); });   //prints "Hello\nWorld"

现在,我以此为例:我怎么能这样做C#我也很好奇classes EG会发生什么:

class foo
{
    public void action()
    {
        Debug.WriteLine("Hello");
    }

    public void action(Delegate fnc)
    {
        action();
        control.Invoke((MethodInvoker)fnc);
    }

}
foo FOO = new foo();
FOO.action();                         //prints "Hello"
FOO.action(() => {                    //prints "Hello\nWorld"
   Debug.WriteLine("World"); 
});

所以我的问题是a)这项工作/我是否关闭(我无法检查我是不是在工作PC atm)和b)如何传递参数(即范围问题):

foo FOO = new foo();
string yay = "Yeah";
FOO.action(() => {                    //prints "Hello\nWorldYeah"
   Debug.WriteLine("World" + yay); 
});

修改

a screen shot of it erroring

1 个答案:

答案 0 :(得分:2)

尽管SO自我指定的警察缺乏帮助(他们仍然错了,谁宁愿惩罚需要答案而不是给出答案的问题),我自己修理了没有他们的帮助 ..所以后人在这里是怎么做的

class foo
{
    public void action()
    {
        Debug.WriteLine("Hello");
    }

    public void action(Action fnc)
    {
        action();
        fnc();
    }
}

并称之为

foo FOO = new foo();
FOO.action();                         //prints "Hello"
FOO.action((Action)(() =>
{                                     //prints "Hello\nWorld"
    Debug.WriteLine("World");
}));

string yay = "Yeah";
FOO.action((Action)(() =>
{                    //prints "Hello\nWorldYeah" - this will indeed still print "Yeah"
    Debug.WriteLine("World" + yay);
}));

使用此技术,您可以将匿名回调函数发送到c#方法