Как вызвать анонимную функцию в С#?
Мне интересно, возможно ли с помощью С# написать код, аналогичный этому 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";
})();
Есть ли способ вызвать функцию, оставляя ее анонимной?
Ответы
Ответ 1
Да, но С# статически типизирован, поэтому вам нужно указать тип делегата.
Например, используя синтаксис конструктора:
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
Вот как вы могли бы использовать такую конструкцию, чтобы заключить контекст-замыкание -
Control.Click += new Func<string, EventHandler>((x) =>
new System.EventHandler(delegate(object sender, EventArgs e)
{
}))(valueForX);