delegate bool Function(int num);//声明委托类型 static Function GreaterThan10 = delegate(int num) { return num >= 10;}; static Function IsEven = delegate(int num) { return num >= 10;};
static List<int> Traverse(List<int> nums,Function function)//修改形参列表 { Var list = new List<int>(); foreach(var num int nums) { If(function(num)) { List.Add(num); } } return list; }
Static void Main(string[] args) { var list = Traverse(new List<int>() {1,2,3,4,5,6,7}, GreaterThan10);//传入委托 Console.WriteLine(Max(new List<int>(){1,2,3,4,5},返回值.min)); Console.ReadLine();//暂停,让程序结果能让使用者看到 }
既然GreaterThan10 = delegate(int num) { return num >= 10;} 那我们直接可以把 var list = Traverse(new List() {1,2,3,4,5,6,7}, GreaterThan10)写成: var list = Traverse(new List() {1,2,3,4,5,6,7}, delegate(int num) { return num >= 10;});
继续化简 var list = Traverse(new List() {1,2,3,4,5,6,7}, (int num) => { return num >= 10;}); 再继续化简 既然申明delegate bool Function(int num)时已经声明num为int类型,那我们为什么还要再写int num? var list = Traverse(new List() {1,2,3,4,5,6,7},(num) => { return num >= 10;}); 当需要且仅需要一个参数时,我们连括号都可以省了 var list = Traverse(new List() {1,2,3,4,5,6,7}, num => { return num >= 10;}); 当只有一个参数,一条语句时 var list = Traverse(new List() {1,2,3,4,5,6,7}, num => return num >= 10); 当没有参数时 var list = Traverse(new List() {1,2,3,4,5,6,7}, () => { return num >= 10;});
static List<int> Traverse(List<int> nums,Func<int,bool> function) { Var list = new List<int>(); foreach(var num int nums) { If(function(num)) { List.Add(num); } } return list; }