Подтвердить что ты не робот

Как вызвать анонимную функцию в С#?

Мне интересно, возможно ли с помощью С# написать код, аналогичный этому 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";
})();

Есть ли способ вызвать функцию, оставляя ее анонимной?

4b9b3361

Ответ 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);