5

我正在阅读 Pulling the switch here并遇到了这段代码。

somoone 可以解释一下什么是() => {}什么,我应该阅读什么来理解那行代码?

var moveMap = new Dictionary<string, Action>()
{
    {"Up", MoveUp},
    {"Down", MoveDown},
    {"Left", MoveLeft},
    {"Right", MoveRight},
    {"Combo", () => { MoveUp(); MoveUp(); MoveDown(); MoveDown(); }}
};

moveMap[move]();
4

4 回答 4

9

这是一个lambda 表达式

所有 lambda 表达式都使用 lambda 运算符=>,读作“goes to”。lambda 运算符的左侧指定输入参数(如果有),右侧保存表达式或语句块

基本上,您在这里构建一个新的临时函数,它只调用其他两个函数的组合。

如上所示,()左侧的 表示它有一个空参数列表(就像您的其他函数一样)。右边的{}意思是它在一个块内执行几个语句,这使它成为一个“语句 lambda”,它被称为它的副作用,与计算一个值的“表达式 lambda”形成对比。

于 2012-05-04T10:25:31.493 回答
4

这是一个lambda 表达式。MSDN 将其称为“语句 lambda”:

语句 lambda 类似于表达式 lambda,只是语句用大括号括起来。

字典包含一组Actions(代表)。4个是明确定义的,第5个是一个匿名函数,它调用其他的2个。最后一行代码调用了一个 Action(它通过键从字典中检索委托并调用它)。

于 2012-05-04T10:25:12.310 回答
4

() => {/*code*/}是一个lambda 表达式,一种创建接受零参数的匿名委托的便捷方式。本质上,它创建了一段可调用的代码,在您的情况下,该代码向上移动两次,然后向下移动两次。

您不仅限于没有参数的 lambda - 您可以创建带参数的 lambda:

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);};
callable("world");
callable("quick brown fox");
于 2012-05-04T10:25:52.290 回答
3

()这是没有参数的匿名函数

=>是 lambda 运算符(发音为 Goes to )

字典已经用 KeyValuePair 初始化,最后一个选项是一个匿名函数,它不带参数并调用其他函数

于 2012-05-04T10:26:55.657 回答