代码之家  ›  专栏  ›  技术社区  ›  Alexander Prokofyev

如何在C中调用匿名函数?

  •  19
  • Alexander Prokofyev  · 技术社区  · 14 年前

    如果可以使用C编写类似于此javascript的代码,我很感兴趣:

    var v = (function()
    {
        return "some value";
    })()
    

    我能做到的最多的是:

    Func<string> vf = () =>
    {
        return "some value";
    };
    
    var v = vf();
    

    但我想要这样的东西:

    // Gives error CS0149: Method name expected
    var v = (() =>
    {
        return "some value";
    })();
    

    是否有某种方法可以调用函数,使其匿名?

    2 回复  |  直到 11 年前
        1
  •  31
  •   Timwi    14 年前

    是的,但C是静态类型的,因此需要指定委托类型。

    例如,使用构造函数语法:

    var v = new Func<string>(() =>
    {
        return "some value";
    })();
    
    // shorter version
    var v = new Func<string>(() => "some value")();
    

    …或者转换语法,这可能会使括号太多而变得混乱:)

    var v = ((Func<string>) (() =>
    {
        return "some value";
    }))();
    
    // shorter version
    var v = ((Func<string>)(() => "some value"))();
    
        2
  •  0
  •   user2124981    11 年前

    下面是如何使用这样的构造来封闭上下文-闭包-

    Control.Click += new Func<string, EventHandler>((x) =>
    new System.EventHandler(delegate(object sender, EventArgs e)
    {
    
    }))(valueForX);