Lambda与委托

  Lambda 表达式是一个可用于创建委托表达式树类型的匿名函数

  通过使用 lambda 表达式,可以可作为参数 或 返回为函数调用值的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。 

  若要创建 Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to)   左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块

  例如,

lambda 表达式 x => x * x

  指定名为 x 的参数并返回 x 的平方。

  您可以按照以下示例将此表达式分配给委托类型:

namespace Lambda 
{     
    class Program     
    {
         delegate int del(int intput);
         static void Main(string[] args)
         {
             del myDelegate = x => (x * x);
             Console.WriteLine(myDelegate(8));//64
         }
     } 
}

 

  Lambda 表达式

 

  表达式在右边的 Lambda 表达式称为“Lambda 表达式”。 Lambda 表达式返回表达式的结果,并采用以下基本形式:

    (input parameters) => expression 

  :只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。

 

  两个或更多输入参数由括在括号中的逗号分隔:

    (x, y) => x == y

  有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:

    (int x, string s) => s.Length > x

  使用空括号指定零个输入参数:

    () => SomeMethod()

 

  Lambda 语句 

  Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:

    (input parameters) => {statement;} 

class Program
     {
         delegate void TestDelegate(string s);
         static void Main(string[] args)
         {
             TestDelegate myDel = n =>
             {
                 string s = n + "....";
                 Console.WriteLine(s);
             };
             myDel("Ca!");
         }
     }

 

1. 完整的委托 

namespace Lambda
 {
     class Program
     {
         delegate string Del(string name);

        static string sayHi(string name)
         {
             return "Hi " + name;
         }
         static void Main(string[] args)
         {
             Del say = new Del(sayHi);
             Console.WriteLine(sayHi("完整委托"));
         }
     }
 }

 

2.升级版本--匿名方法

namespace Lambda
 {
     class Program
     {
         delegate string Del(string name);
         static void Main(string[] args)
         {
             Del sayHi = delegate(string name) { return "Hi " + name; };
             Console.WriteLine(sayHi("匿名方法")); 
        }
     }
 }

 

 3.升级版本Lambda表达式

namespace Lambda
 {
     class Program
     {
         delegate string Del(string name);
         static void Main(string[] args)
         {
             Del sayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi("Lambda表达式")); } } }

 

4.委托替代--Func 委托 有参数有返回值

namespace Lambda
 {
     class Program
     {
        static void Main(string[] args)
         {
             Func<string, string> sayHi = delegate(string name) { return "Hi " + name; };
             Func<string, string> SayHi = name => { return "Hi " + name; };
             Console.WriteLine(sayHi(" Func<string, string>匿名委托"));
             Console.WriteLine(SayHi(" Func<string, string>Lambda委托"));
         }
     }
 }

 

5.委托替代--Action 委托 有参数无返回值

 

namespace Lambda
 {
     class Program
     {
        static void Main(string[] args)
         {
             Action<string> sayHi = delegate(string name)
             {
                 Console.WriteLine("Hi " + name);
             };
             Action<string> SayHi = name => Console.WriteLine("Hi " + name);
             sayHi("Action<string> sayHi匿名委托");
             SayHi("Action<string> SayHi Lambda委托");
         }
     }
 }

 

 

参考:

  写给那些看不懂委托的同学

  用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

posted on 2013-12-25 14:05  Aidou_dream  阅读(377)  评论(0编辑  收藏  举报

导航