我读过 Lambda 表达式是对 C# 的一个非常强大的补充,但我发现自己被它们迷惑了。他们如何改善我的生活或使我的代码更好?谁能指出学习此类表达的好资源?
它们看起来很酷,但它们与我作为 asp.net 开发人员的日常生活有何关系?
编辑:感谢您提供的示例,并感谢 Eric White 文章的链接。我现在还在消化这些。一个快速的问题: lambda 表达式对查询以外的任何东西有用吗?我见过的每个例子都是一个查询结构。
: lambda 表达式对查询以外的任何事情都有用吗
Lamba 表达式只不过是一种“内联”编写函数的便捷方式。
所以它们在任何你想要一些代码的地方都很有用,它可以像一个单独的函数一样被调用,但实际上是在它的调用者内部编写的。(除了将相关代码保存在文件中的相同位置之外,这还允许您玩具有可变范围的有趣游戏 - 请参阅“闭包”以获取参考。)
一个与查询无关的使用 Lamba 的示例可能是一段代码,它以 ThreadPool.QueueUserWorkItem 开始异步执行某些操作。重要的一点是,您也可以使用匿名委托(这是 C#2 的介绍)来编写它,或者只是一个简单的单独的类成员函数。
这个http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx是对所有这些东西的一个极好的分步介绍,它可能会对你有所帮助。
Lambda 为 C# 带来了函数式编程。它们是匿名函数,可以作为值传递给某些其他函数。在 LINQ 中使用最多。
这是一个人为的例子:
List<int> myInts = GetAll();
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0);
现在,当您通过 evenNumbers foreach 时,lamda
x=> x % 2 == 0
然后作为过滤器应用到 myInts。
它们在提高具有许多嵌套 IF 条件和循环的复杂算法的可读性方面变得非常有用。
这是一个简单的例子,你可以用 lambdas 做一些很酷的事情:
List<int> myList = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
myList.RemoveAll(x => x > 5);
//myList now == {1,2,3,4,5}
RemoveAll 方法接受一个谓词(一个接受参数并返回布尔值的委托),任何与它匹配的都将被删除。使用 lambda 表达式比实际声明谓词更简单。