lambda表达式和匿名函数最大的区别就是 连delegate都不用写了
定义一个无参无返回的lambda表达式,发现报错了。因为lambda表达式和匿名函数一样 要结合委托以及世界使用。
声明一个Action委托,再使用它。和匿名函数一样的。
有参情况下同理。
有返回值的lambda函数
其缺点也和匿名函数一样的。
无法指定的删减某一lambda表达式。
例如:Action ac = lambda1;
ac += lambda2;
无法用 ac -= lambda1的形式删减 lambda1。
闭包
内层的函数可以引用包含再它外层的函数的变量,即使外层函数的执行以及终止。
注意:该变量提供的值并非变量创建时的值 而是在父函数范围内的最终值。
通常来讲当 int value = 10 完成时,value就会被释放。它在栈中。但是lambda表达式引用了它,相当于占用了它。导致它原本被释放的结局 延后了。因此形成闭包。
注意:该变量提供的值并非变量创建时的值 而是在父函数范围内的最终值。
打印出来的都是10.
怎么理解呢? 当for循环时,i传进lambda表达式,在被事件 +=。并没有被调用,当循环完毕时,i=10。那么action里的10个Console.WriteLine(i),i直接为10了。再调用DoSomthing()打印11个10.
那么我想得到0~9怎么办?