Lambda 表达式

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);
            }
        });
}

猜你喜欢

转载自blog.csdn.net/jingangxin666/article/details/80382989