最初的写法 // 先定义一个方法,有名字、有访问修饰符、有完整签名 bool IsEven(int n) { return n % 2 == 0; } var numbers = new List<int> { 1, 2, 3, 4, 5, 6 }; var evens = numbers.FindAll(IsEven); // 传方法名 很繁琐地写了一大堆,只为了说明要n % 2 == 0 不行啊太麻烦了,弄简单点 于是出现第一代:匿名方法 // 不用单独定义方法了,当场写当场用,方法没有名字所以称为匿名方法 var evens = numbers.FindAll( delegate(int n) { return n % 2 == 0; } ); 方便了一点,但是还不够 于是第二代:lambda // 去掉 delegate,用 => 表示“传入 → 传出” var evens = numbers.FindAll((n) => { return n % 2 == 0; }); 嗯目前还不错,但是懒都懒了,干脆懒到底好了 于是第三代:lambda表达式 // 去掉括号、去掉 return、去掉花括号、去掉类型 var evens = numbers.FindAll(n => n % 2 == 0); 再捋一遍 具名方法: bool IsEven(int n) { return n % 2 == 0; } ← 独立方法 匿名方法: delegate(int n) { return n % 2 == 0; } ← 去掉名字 Lambda 语句体: (n) => { return n % 2 == 0; } ← 去掉 delegate Lambda 表达式: n => n % 2 == 0 ← 只留支架 lambda是语法糖,可以不会写,基本不影响做项目,但是会写能写的更舒服
lambda的演化历程
以下为完整正文内容。
正文
搜索结果
请输入关键词开始搜索。