什么是设备以及如何使用 lambda 表达式? [复制]

Posted

技术标签:

【中文标题】什么是设备以及如何使用 lambda 表达式? [复制]【英文标题】:What is appliance and how to use lambda expressions? [duplicate] 【发布时间】:2010-09-06 17:23:45 【问题描述】:

我听说 Lambda 表达式是对 C# 的一个非常强大的补充,但我发现自己被它们迷惑了。他们如何改善我的生活或使我的代码更好?谁能指出学习此类表达的好资源?

它们看起来很酷,但它们与我作为 asp.net 开发人员的日常生活有何关系?

编辑:感谢您提供的示例,并感谢您提供指向 Eric White 文章的链接。我现在还在消化这些。一个快速的问题: lambda 表达式对查询以外的任何东西有用吗?我见过的每个示例都是一个查询构造。

【问题讨论】:

这些是很好的答案,但之前也有人问过。另一个question 是一个很好的资源。 【参考方案1】:

: lambda 表达式对查询以外的任何事情都有用

Lamba 表达式只不过是一种“内联”编写函数的便捷方式。

所以它们在任何你想要一些代码的地方都很有用,它可以像一个单独的函数一样被调用,但实际上是在它的调用者内部编写的。 (除了将相关代码保存在文件中的相同位置之外,这还允许您玩具有可变范围的有趣游戏 - 请参阅“闭包”以获取参考。)

一个非查询相关的使用 Lamba 的示例可能是一段代码,它以 ThreadPool.QueueUserWorkItem 开始异步执行某些操作。重要的一点是,您也可以使用匿名委托(这是 C#2 介绍)来编写它,或者只是一个简单的单独的类成员函数。

http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx 是对所有这些内容的精彩分步介绍,可能会对您有所帮助。

【讨论】:

【参考方案2】:

Lambda 将函数式编程带入 C#。 它们是匿名函数,可以作为值传递给某些其他函数。在 LINQ 中使用最多。

这是一个人为的例子:

List<int> myInts = GetAll();
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0);

现在当你通过 evenNumbers 遍历 lamda

x=> x % 2 == 0

然后作为过滤器应用到 myInts。

它们在提高复杂算法的可读性方面变得非常有用,这些算法具有许多嵌套的 IF 条件和循环。

【讨论】:

【参考方案3】:

这是一个简单的例子,说明你可以用 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 表达式比实际声明谓词更简单。

【讨论】:

以上是关于什么是设备以及如何使用 lambda 表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥要使用lambda表达式?原来如此,涨知识了

函数式编程/lambda表达式入门

Haskell - lambda 表达式

使用 Lambda 表达式调用通用方法(以及仅在运行时知道的类型)

函数接口

Lambda如何使用?