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

时间:2010-10-13 12:57:25

标签: c# anonymous-function

我感兴趣的是,如果可以使用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 个答案:

答案 0 :(得分:31)

是的,但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"))();

答案 1 :(得分:0)

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

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

}))(valueForX);