在JavaScript中,我可以通过动态创建函数为变量赋值。如
var name = (function () { name="bob"; return name; }());
我很确定使用C#4.0可以实现相同类型的事情。有人能告诉我C#上面同一行的语法吗?
另外,如果你能记住创造这种动态功能的正确术语,那么我将非常感激!
感谢您的帮助!
PS:这个问题很可能以前曾被问过,但由于我不清楚命名法,我可能错过了找到它。如果是这样,我道歉!答案 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)
一般来说,您要查看的是Func / Actions:
http://msdn.microsoft.com/en-us/library/bb549151.aspx
http://msdn.microsoft.com/en-us/library/018hxwa8.aspx
就此而言,lambda表达式: