.net Lamda表达式

Lamda表达式主要有两种形式:

  1. (input-parameters) => expression
  2. (input-parameters) => { <sequence-of-statements> 

第一种方式会有一个返回值,返回表达式右边的值:

例如:

Func<int, int> square = x => x * x;
Console.WriteLine(square(5));

而第二种形式可以有返回值,也可以没有返回值

Action<string> greet = name =>
{
    string greeting = $"Hello {name}!";
    Console.WriteLine(greeting);
};
greet("World");

使用 lambda 声明运算符=> 从其主体中分离 lambda 参数列表。 若要创建 Lambda 表达式,需要在 Lambda 运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。

任何 Lambda 表达式都可以转换为委托类型。 Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。 如果 lambda 表达式不返回值,则可以将其转换为 Action 委托类型之一;否则,可将其转换为 Func 委托类型之一。 例如,有 2 个参数且不返回值的 Lambda 表达式可转换为 Action<T1,T2> 委托。 有 1 个参数且不返回值的 Lambda 表达式可转换为 Func<T,TResult> 委托.

------------------------------------------------------------------Lamda表达式与Action委托使用-----------------------------------------------------------------------------------

Action line = () => Console.WriteLine();
 line()
如果 lambda 表达式只有一个输入参数,则括号是可选的:如果有多个参数,在括号里用逗号隔开
Action<string,string> line = (x,y) => Console.WriteLine(x+y);
line("a","b")

 

------------------------------------------------------------------Lamda表达式与Func委托使用-----------------------------------------------------------------------------------

Func<double, double> cube = x => x * x * x;
如果有多个参数,中间用逗号隔开 
Func<double, double,double,double> cube = (x,y,z) => x * y * z;
Func<int, int, bool> testForEquality = (x, y) => x == y;
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

 

------------------------------------------------------------------异步 lambda-----------------------------------------------------------------------------------

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

一般方法添加事件:

.net Lamda表达式
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        button1.Click += button1_Click;
    }

    private async void button1_Click(object sender, EventArgs e)
    {
        await ExampleMethodAsync();
        textBox1.Text += "\r\nControl returned to Click event handler.\n";
    }

    private async Task ExampleMethodAsync()
    {
        // The following line simulates a task-returning asynchronous process.
        await Task.Delay(1000);
    }
}
View Code

lamda表达式添加事件按:

.net Lamda表达式
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        button1.Click += button1_Click;
    }

    private async void button1_Click(object sender, EventArgs e)
    {
        await ExampleMethodAsync();
        textBox1.Text += "\r\nControl returned to Click event handler.\n";
    }

    private async Task ExampleMethodAsync()
    {
        // The following line simulates a task-returning asynchronous process.
        await Task.Delay(1000);
    }
}
View Code

 

 

 

 

 

 

 




.net Lamda表达式

上一篇:[webpack] Configuration Error: Avoid modifying webpack output.publicPath directly. Use the "publicPath" option instead.


下一篇:oracle tfactl使用 TFA