Lambda表达式

  

返回类型  方法名(参数){方法体}  //普通方法
delegate (参数列表) {方法体}  //匿名方法
(参数列表)=>{方法体}  //

  Lambda表达式的引入是与委托类型的使用密切相关的,本质上,Lambda表达式只是用更简单的方式来书写匿名方法,从而完全简化.NET委托类型的使用。函数

  下面用一个例子,展现简化的过程:spa

  eg:找出整数List<T>中的偶数,咱们调用了List<T>类型的FindAll()方法.这个方法须要System.Prediate<T>泛型委托,用于接收类型为T的输入参数并返回一个布尔值。code

  • 传统的委托使用方式。

定义一个单独的方法。blog

static void Main(string[] args)
        {
            List<int> list = new List<int>() { 1,5,10,20,33};

            //使用传统委托语法调用FindAll
            Predicate<int> callback = new Predicate<int>(IsEvenNumber);
            List<int> evenNumbers = list.FindAll(callback);

            foreach (int num in evenNumbers)
            {
                Console.Write("{0}\t",num);
            }
            Console.ReadLine();
        }
 static bool IsEvenNumber(int i)
        {
            return (i % 2) == 0;
        }

 

  • 匿名方法取代显示的委托函数。


不须要完整的方法定义。string

static void Main(string[] args)
        {
            List<int> list = new List<int>() { 1, 5, 10, 20, 33 };
            //使用匿名方法
            List<int> evenNumbers = list.FindAll(
                delegate(int i)
                {
                    return (i % 2 == 0);
                }
                );
            foreach (var num in evenNumbers)
            {
                Console.WriteLine("{0}",num);
            }
            Console.ReadLine();
        }

 

  • 使用Lambda表达式。

进一步的简化。底层的委托消失的无隐无踪。it

static void Main(string[] args)
        {
            List<int> list = new List<int>() { 1, 5, 10, 20, 33 };
            
            //使用Lambda表达式
            List<int> evenNumbers = list.FindAll(i=>(i%2)==0);

            foreach (var num in evenNumbers)
            {
                Console.WriteLine("{0}",num);
            }
            Console.ReadLine();
        }

  Lambda表达式能够应用与任何匿名方法能够应用的场合。Lambda表达式的格式:先定义参数列表,=>(可读为:goes to)紧随其后,而后是表达式。即Arguments ToProcess=>Statements ToProess Themclass

  Lambda表达式也能够是一个代码块,包含多条语句。泛型

相关文章
相关标签/搜索