() => {} 是什么意思

本文关键字:是什么 意思 | 更新日期: 2023-09-27 18:33:15

我正在阅读 拉动这里的开关 并遇到了这段代码。

somoone能否解释一下什么是() => {}以及我应该阅读什么才能理解那行代码?

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

() => {} 是什么意思

这是一个

lambda表达式:

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

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

如上所示,左侧的()表示它有一个空的参数列表(就像您的其他函数一样)。右侧的{}表示它在一个块内执行多个语句,这使其成为"语句 lambda",因其副作用而被调用,与计算值的"表达式 lambda"相反。

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

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

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);};
callable("world");
callable("quick brown fox");

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

语句 lambda 类似于表达式 lambda,不同之处在于 语句括在大括号中。

字典包含一组Actions(委托)。 4 个是显式定义的,第 5 个是匿名函数,它调用其他 2 个。最后一行代码调用操作(它按键从字典中检索委托并调用它)。

()这是

没有参数的匿名函数

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

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