2010-10-13 2 views
19

Я интересно, если это возможно с помощью C#, чтобы написать код, аналогичный этому Javascript один:Как вызвать анонимную функцию в C#?

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

Можете ли вы сказать, что именно вы хотите сделать с кодом? Каков желаемый вход и выход? –

+5

@ Амад: Вопрос совершенно ясен и недвусмыслен. – Timwi

+0

Можете ли вы объяснить, почему вы хотите это сделать? Зачем проходить через все rigamarole определения анонимной функции и вызывать ее, когда вы можете просто поместить тело анонимной функции * прямо здесь *, и она будет вызываться при запуске кода? –

ответ

30

Да, но 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"))(); 
+3

его очень круто ... :) – RameshVel

+0

Большое спасибо! Я должен угадать. –

+2

Примите ваш ответ в течение 8 минут. :) –

0

Вот как вы могли бы использовать такая конструкция, чтобы заключить контекст - замыкание

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

}))(valueForX); 
+1

Это делает больше, чем вам нужно. – Servy

+1

Жесткий, избыточный вызов функции, которая не должна быть функцией. Похоже, вы исходите из фона JS; это необходимо в JS только потому, что переменные привязаны к целой функции в JS. C# имеет правильное правильное отображение, поэтому это необязательно. – Timwi

Смежные вопросы