我感兴趣的是,如果可以使用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";
})();
有没有办法调用函数让它匿名?
答案 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);