Создайте функцию и вызовите ее в одной строке кода C # - PullRequest
5 голосов
/ 29 января 2009

Можно ли динамически создать функцию и вызывать ее (передавая значения в нее) в одной строке кода?

Пояснение: Я искал способ, который позволил бы мне создать анонимную функцию и затем вызывать ее напрямую. Сортировка:

delegate(string aa){ MessageBox.show(aa); }("Hello World!");

или что-то в этом роде (я знаю, что приведенный выше код не компилируется, но я хотел что-то близкое).

Ответы [ 4 ]

17 голосов
/ 29 января 2009
new Action<int>(x => Console.WriteLine(x))(3);

это не так читабельно, но, отвечая на ваш вопрос, вы определенно можете.

РЕДАКТИРОВАТЬ: только что заметил, что вы пометили его как c # 2.0, ответ выше для 3.5, для 2.0 это будет

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3);
8 голосов
/ 29 января 2009

.Invoke на самом деле не нужен; Вы можете просто написать:

new Action<int>(x => Console.WriteLine(x))(3);

или для C # 2.0:

new Action<int>(delegate(int x) { Console.WriteLine(x); })(3);
2 голосов
/ 29 января 2009
1 голос
/ 29 января 2009

Для создания анонимного метода используйте делегат:

delegate(...your arguments...) { ...your code... };

Редактировать: после того, как вопрос был пересмотрен, ответ паблито более точный.

...