介绍  

  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 表达式创建该委托最为方便。

Func和lambda

  更加简化了代码量,此时就不用像上面一样就行声明委托直接可以用

public static void LambdaFunc()

{

Func<string, string, string> getFunc = (p1, p2) =>

{

return p1 + "    " + p2;

};

Console.WriteLine(getFunc("我是第一个参数","我是第二个参数"));

}

Linq和lambda

    //获取所有的用户ID

List<string> gidList = Users.Select(p => p.Gid).ToList();

//获取所有大于6的集合

aaList = retList.Where(p => p > 6).ToList();

表达式 lambda

  表达式位于 => 运算符右侧的 Lambda 表达式称为“表达式 lambda”。

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:(x, y) => x == y

使用空括号指定零个输入参数:() => SomeMethod()

TestDelegate del = n => { string s = n + " World";

Console.WriteLine(s); };

异步 lambda

  通过使用 async 和 await 关键字,你可以轻松创建包含异步处理的 lambda 表达式和语句。 例如,下面的 Windows 窗体示例包含一个调用和等待异步方法 ExampleMethodAsync的事件处理程序。

private async void button1_Click(object sender, EventArgs e)

{

// ExampleMethodAsync returns a Task.

await ExampleMethodAsync();

textBox1.Text += "\r\nControl returned to Click event handler.\n";

}

async Task ExampleMethodAsync()

{

// The following line simulates a task-returning asynchronous process.

await Task.Delay(1000);

}

参考:

Lambda 表达式(C# 编程指南)

C#之Lambda不得不说的用法

05-27 18:02