【发布时间】:2014-07-18 20:19:07
【问题描述】:
我编写了很多语言:Java、PHP、C#、JQuery 仅举几例,但我在 C# 中只是中等,我是对如何使用匿名函数感到困惑。我已经看到很多对Action<T>、lambda 和delegates 的引用,但我不确定它们是什么以及它们的重要性:
我(但是)很习惯 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);
});
编辑
【问题讨论】:
-
@eddie_cat 不确定您的意思?你是在问我为什么写了非常全面的伪代码这个问题?如果是这样,我会非常关心和关注,因为我想知道如何形成它。不错的答案虽然
-
你给了我一个-1,因为你认为我没有展示足够的真实研究?这真的公平吗?我(个人)认为这个问题实际上是很好形成的(如果我用谷歌搜索的话,基于网上的糟糕例子)
-
当然,格式正确。但这对 SO 来说不是一个好问题。实际上,您声明在此处询问之前您还没有尝试过自己进行试验。并且有很多关于这个主题的教程。我并不是说如果你遇到问题就不能问问题。我是说你似乎还没有机会遇到问题。
-
我没有生气。我对你原来的帖子的问题是你问了
a) does this work / am I close。您应该知道您在 SO 上发布的代码是否有效。你应该试着让它工作,你应该能够解释你尝试过的没有奏效的事情。这就是我在您的帖子中遇到的问题。 -
我说它会让你开始。没有给你你需要的确切代码。
标签: c# lambda delegates action anonymous-function