Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 。 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,需要在 Lambda 运算符 =>左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x
指定名为 x
的参数并返回 x
的平方值。 如下面的示例所示,你可以将此表达式分配给委托类型:
delegate int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
}
=>
运算符具有与赋值运算符 (=
) 相同的优先级并且是右结合运算
表达式 lambda
表达式位于 => 运算符右侧的 Lambda 表达式称为“表达式 lambda”。 表达式 lambda 广泛用于表达式树的构造。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:
(input-parameters) => expression
仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:
(x, y) => x == y
有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:
(int x, string s) => s.Length > x
==使用空括号指定零个输入参数==:
() => SomeMethod()
Lambda 的主体可以包含一个方法调用。 (==输入的是零个参数==)
示例:
监听可以用==表达式 lambda==或者==匿名函数==
//表达式 lambda
closeButton.onClick.AddListener(() => UIManager.Instance.SetClose(this));
//匿名函数
for (int i = 0; i < mToggles.Length; i++) {
var index = i;
mToggles[i].onValueChanged.AddListener(
delegate
{
if (mToggles[index].isOn) {
SwitchDifficulty(index);
}
});
}