说明(2017-11-21 18:51:32):
1. 例子为求1~100的和,答案应该是5050(小学学算盘的时候,我爹就让我算,从1拨到100是多少呀?当时的我年幼无知,还不知道高斯小时候的故事,扒拉了半天高高兴兴的去说答案,结果说不对,艹!)
2. Lambda表达式是将匿名委托给简化了的写法,省去了delegate关键字,省去了参数类型,但是要保证参数类型不能出错,也就是跟委托定义时的参数类型一致。
3. 其他没啥好说的看注释,下一讲用Lambda表达式求水仙花数。
正常写法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _05_匿名委托 { class Program { static void Main(string[] args) { //调用方法 Console.WriteLine(GetSum(1, 100)); Console.ReadKey(); } //定义求和的方法 public static int GetSum(int x, int y) { int sum = 0; for (int i = x; i <= y; i++) { sum += i; } return sum; } } }
匿名委托写法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _05_匿名委托 { class Program { public delegate int MyDel(int x, int y); static void Main(string[] args) { //记得最后要加分号,因为是赋值,跟js一样。 MyDel myDel = delegate(int x, int y) { //在委托里面定义求和的方法,匿名委托用于只需要调用一次的方法,省的再起个方法名了(说的就是上面的GetSum!) int sum = 0; for (int i = x; i <= y; i++) { sum += i; } return sum; }; Console.WriteLine(myDel(1, 100)); Console.ReadKey(); } } }
Lambda表达式写法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _05_匿名委托 { class Program { public delegate int MyDel(int x, int y); static void Main(string[] args) { //尼玛连参数类型都省了,还有那个delegate关键字,太特么懒了! MyDel myDel = (a, b) => { int sum = 0; for (int i = a; i <= b; i++) { sum += i; } return sum; }; Console.WriteLine(myDel(1, 100)); Console.ReadKey(); } } }