在C#中为动态函数调用的结果赋值变量

时间:2011-08-16 17:26:44

标签: c# javascript dynamic

在JavaScript中,我可以通过动态创建函数为变量赋值。如

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

我很确定使用C#4.0可以实现相同类型的事情。有人能告诉我C#上面同一行的语法吗?

另外,如果你能记住创造这种动态功能的正确术语,那么我将非常感激!

感谢您的帮助!

PS:这个问题很可能以前曾被问过,但由于我不清楚命名法,我可能错过了找到它。如果是这样,我道歉!

2 个答案:

答案 0 :(得分:6)

您可以使用匿名方法:

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

第一行的语法是lambda,它是C#3.0及以上声明匿名方法的方法。上面的函数没有任何参数,但没有什么能阻止你包含它们:

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

请注意,由于只有一个参数,您可以忽略它周围的括号。同样,由于整个方法都是单个return语句,因此您可以省略括号括号以及return语句本身。

这种类型的lambda在使用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");

您将收到一条错误消息“预期方法名称”。您必须先将匿名方法分配给委托。

答案 1 :(得分:0)