初探Lambda表达式

1.须知

首先让我们理解下如何定义一个匿名函数 例如事件

 this.Closed += delegate(object sender, EventArgs e) { MessageBox.Show("窗体已经关闭了"); };

首先关闭事件的事件是带有object sender, EventArgs e  两个参数的委托,我们也可以使用Lambda表达式进行编写.

 this.Closed+=(sender,e)=>{MessageBox.Show("窗体已经关闭了"); }; 这样写大家就很明白了.

 Sender,e 分别代表两个参数 =>{} 代表具体执行的地方.

2.使用

在实际应用当中我们会在linq当中使用它,因为泛型给我提供了很多有效的方法,请看以下代码

 

 

代码
 List < UserClass >  Lists  =   new  List < UserClass >
            {
                
new  UserClass{ Age = 15 , Name = " 先生A " },
                
new  UserClass{ Age = 16 , Name = " 先生B " },
                
new  UserClass{ Age = 17 , Name = " 女士A " },
                
new  UserClass{ Age = 22 , Name = " 女士B " },
                
new  UserClass{ Age = 24 , Name = " 女士C " },
                
new  UserClass{ Age = 26 , Name = " 女士D " },
                
new  UserClass{ Age = 27 , Name = " 女士E " },
                
new  UserClass{ Age = 28 , Name = " 女士F " }
            };

lst_Name.ItemsSource 
=  Lists.Where(mode  =>  {  return  mode.Age  >   20 ; });

 

 如果我们用lists 打点,会出现很多<> 这样的方法,我们看到这个标志就应该知道了,就是泛型方法,那我们传入的参数就应该符合条件,那如果我们用匿名委托的写法也不是不可以,只不过相对繁琐,这样lambda表达式就很好啦。

例如:

public delegate TResult Func<TArg0, TResult>(TArg0 arg0) 一个委托泛型方法。

针对这个方法我们如何写呢: Func<int, bool> myFunc = x => x == 5;

调用:myFunc (6) 结果为false

3.规则

  • Lambda 包含的参数数量必须与委托类型包含的参数数量相同。

  • Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。

  • Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。
    其实这3项和匿名委托时一样的.

  •  

     

     

    你可能感兴趣的:(lambda)