lambda表达式

  lambda表达式其实就是匿名委托的一个精简版。
  public delegate void Del1();
  Del1 d1 = delegate(){Console.WriteLine("ss");};
  d1 = ()=>{Console.WriteLine("ss");};   //  由于没有参数,那么()不能省略
  public delegate int Del2();
  Del2 d2 = delegate(){return 1;};
  d2 = ()=>{return 1;};
  如果是直接返回,换句话说就是没有业务逻辑处理,也就是只有一条返回语句,可以把{}换成()同时去掉return关键字
  d2=()=>(1);
  如果方法体中有业务逻辑,则必须使用{}
  d2=()=>{if(2>1){return 1;}else{return 2;}};
  public delegate void Del3(string a);
  Del3 d3 = delegate(string a){Console.WriteLine(a);};
  d3 = (stirng a)=>{Console.WriteLine(a);};
  可以把参数的类型给去掉,因为系统会自行的判断参数的类型,毕竟是把这个lambda赋值给了对应的委托。
  d3 = (a)=>{Console.WriteLine(a);};
  如果说只有一个参数,则不需要()
  d3 = a =>{Console.WriteLine(a);};
  public delegate string Del4(string a);
  Del4 d4 = delegate(string a){string c = a+78;return c;}
  d4 = (string a)=>{a+78;return a;};
  d4 = a=>{a+78;return a;}
  d4 = a=>("gg");

View Code
 1 using System;
 2 public delegate void Delsing(int c);
 3 public delegate int DelPlus(int a ,int b);
 4 public delegate string DelString(string a,int b);
 5  public class studydelegate
 6  {
 7      public static void Main()
 8      {
 9          //有一个参数传递时
10          Delsing d1 =c=>{Console.WriteLine(c);};
11          //Test(d1,34);
12          Test(c=>{Console.WriteLine(c);},56);
13          //有两个传递参数时
14         DelPlus d2 = (a,b)=>{int e = a+b;return e;};
15         //Test(d2,1,2);
16         Test((a,b)=>{int e = a+b ; return e;},7,9);
17         DelPlus d3 =(a,b)=>(a+b);
18         //Test(d3,6,8);
19         Test((a,b)=>(a+b),5,7);
20         
21         DelString d4 = (dea,b)=>(dea+" "+b);
22         //Test(d4,"shddfuf",88);
23         Test((a,b)=>(a+" "+b ),"hudei",89);        
24      } 
25      public static void Test(Delsing d,int a)
26      {
27        d(a);
28      }
29      public static void Test(DelPlus d,int a,int b)
30      {
31         int e = d(a,b);
32          Console.WriteLine(e);
33      
34      }
35      public static void Test(DelString d,string a,int b)
36      {
37          string s = d(a,b);
38         Console.WriteLine(s);
39      }
40  }

定义一个有参委托类 

public delegate int Del5(int a,int b);
  Del5 d5 = delegate(int a,int b){return a+b;}'
  d5 = (int a,int b)=>{return a+b;};
  d5 = (a,b)=>{return a+b;};
  如果参数个数是大于1的时候,不能把小括号给去掉
  d5 = (a,b)=>(a+b);
  d5 = (a,b)=>a+b;
  d5 = a=>a+1;

下面我们看个练习:

 

posted @ 2012-08-04 14:04  妍珊  阅读(342)  评论(0编辑  收藏  举报