【问题标题】:I'm confused about optional anonymous functions in C#我对 C# 中的可选匿名函数感到困惑
【发布时间】:2014-07-18 20:19:07
【问题描述】:

我编写了很多语言:JavaPHPC#JQuery 仅举几例,但我在 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); 
});

编辑

【问题讨论】:

  • @eddie_cat 不确定您的意思?你是在问我为什么写了非常全面的伪代码这个问题?如果是这样,我会非常关心和关注,因为我想知道如何形成它。不错的答案虽然
  • 你给了我一个-1,因为你认为我没有展示足够的真实研究?这真的公平吗?我(个人)认为这个问题实际上是很好形成的(如果我用谷歌搜索的话,基于网上的糟糕例子)
  • 当然,格式正确。但这对 SO 来说不是一个好问题。实际上,您声明在此处询问之前您还没有尝试过自己进行试验。并且有很多关于这个主题的教程。我并不是说如果你遇到问题就不能问问题。我是说你似乎还没有机会遇到问题。
  • 我没有生气。我对你原来的帖子的问题是你问了a) does this work / am I close。您应该知道您在 SO 上发布的代码是否有效。你应该试着让它工作,你应该能够解释你尝试过的没有奏效的事情。这就是我在您的帖子中遇到的问题。
  • 我说它会让你开始。没有给你你需要的确切代码。

标签: c# lambda delegates action anonymous-function


【解决方案1】:

尽管没有来自 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# 方法发送匿名回调函数

【讨论】:

  • 如果你发布了一个答案,你可能有时间和地点说这个
  • 我也可以在评论中说,不需要发布答案,因为这不是问题的答案,只是你从问题中的代码中添加了不必要的代码到你的答案中,没有效率原因。事实上,因为它甚至不是问题的问题它不属于答案。由于这只是您的答案的问题,因此它属于您的答案的评论。
猜你喜欢
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2013-07-28
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多