Присвойте переменную результат динамического вызова функции в C # - PullRequest
5 голосов
/ 16 августа 2011

В JavaScript я могу присвоить значение переменной, динамически создав функцию.Например,

var name = (function () { name="bob"; return name; }());

Я вполне уверен, что с C # 4.0 возможны вещи такого же типа.Может ли кто-нибудь показать мне синтаксис того, как та же строка выше будет выглядеть в C #?

Кроме того, если бы вы могли пробежаться по моей памяти по поводу того, что является правильным термином для создания этого типа динамической функции, было бы очень полезно!

Спасибо за вашу помощь!

PS: Скорее всего, этот вопрос уже задавался ранее, но, поскольку я был неясен в номенклатуре, возможно, я пропустил ее поиск.Если это так, я прошу прощения!

Ответы [ 2 ]

6 голосов
/ 16 августа 2011

Вы можете использовать анонимные методы:

Func<string> anonymousFunction = () => { string name = "bob"; return name; };
string myName = anonymousFunction();

Синтаксис в первой строке - это лямбда, то есть C # 3.0 и выше способ объявления анонимных методов.Вышеприведенная функция не принимает аргументов, но ничто не мешает вам также включить их:

Func<string, string> makeUppercase = x => x.ToUpper();
string upperCase = makeUppercase("lowercase");

Обратите внимание, что, поскольку есть только один параметр, вы можете опустить скобки вокруг него.Кроме того, поскольку весь метод является одним оператором возврата, вы можете исключить как фигурные скобки, так и сам оператор return.

Этот тип лямбды очень распространен при использовании методов расширения LINQ,поскольку многим из них требуется метод с одним аргументом, который возвращает значение:

var numbers = new List<int>() { 1, 2, 3, 4 };
var divisibleByTwo = numbers.Where(num => num % 2 == 0);

Чтобы ответить на ваш реальный вопрос, этот синтаксис недопустим в C #.Если вы попробуете это:

string output = (x => x.ToUpper())("lowercase");

Вы получите сообщение об ошибке «Имя метода ожидается».Сначала необходимо назначить анонимный метод делегату.

0 голосов
/ 16 августа 2011

В общем, вы хотите изучить Func / Actions:

http://msdn.microsoft.com/en-us/library/bb549151.aspx

http://msdn.microsoft.com/en-us/library/018hxwa8.aspx

И, в этом отношении, лямбда-выражения:

http://msdn.microsoft.com/en-us/library/bb397687.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...