将c#中动态函数调用的结果赋值给变量

Assign a variable the result of dynamic function call in C#

本文关键字:结果 赋值 变量 函数调用 动态      更新时间:2023-09-26

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

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

我很确定c# 4.0中同样的事情是可能的。有人能告诉我上面的同一行在c#中的语法吗?

另外,如果你能提醒我创建这种类型的动态函数的适当术语是什么,那将是非常感激的!

谢谢你的帮助!

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

可以使用匿名方法:

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语句本身。

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

你会得到一个错误消息,说"方法名称预期。"你必须首先将匿名方法分配给一个委托。

一般情况下你需要查看的是Func/Actions:

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

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

对于这个问题,lambda表达式:

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