请有人解释一下......(C#Lambda表达式)

时间:2010-11-20 05:40:02

标签: c#

之间有什么区别
Func<string,int> returnLength;
returnLength = (string text) => { return text.Length; };
Console.WriteLine (returnLength("Hello"));

简单地

  string str = "Hello";
  Console.WriteLine (str.Length);

使用其中一种优势?

7 个答案:

答案 0 :(得分:2)

lambda为您提供了一个函数,您现在可以将其传递给其他函数,而不是硬编码对Length成员的访问。

答案 1 :(得分:2)

从技术上讲,两种选择都有效。但是,您可以出于各种原因选择一个。但是,这个对我来说似乎最重要:

简单性,可读性,可维护性 - 一些lambda表达式,尤其是LINQ表达式,比非lambda等价物更短,更易于维护。

在这种情况下,似乎lambda实际上占用的空间更多。因此,就个人而言,我更喜欢第二种选择。但是,在我的其他情况下,lambdas是更好的选择。

就性能而言:据我所知,lambdas有点慢。当然,在这种情况下,这种差异可以忽略不计。

答案 2 :(得分:2)

这个问题实际上并不是关于何时使用lambda表达式,而是在何时使用委托。答案是您使用委托作为封装行为并传递它的方式。

有用的例子:

  • 事件处理程序(最常见的示例是用户界面事件,例如按钮单击)
  • 异步操作回调(“完成下载网页后运行此代码”)
  • LINQ操作(“使用此谓词执行过滤”)
  • 启动新线程(“创建线程时,在其中运行此代码”)

所有这些都可以完成接口;委托在很多方面类似于单方法接口。但是,委托通常是一个更简洁的解决方案,部分原因是您可以比实现接口更灵活地创建委托,使用单个方法或使用匿名方法或lambda表达式内联逻辑。

答案 3 :(得分:1)

请注意,第一个可以简单地重写为

Func<string, int> returnLength = text => text.Length;

第一个的用处是它可以在需要委托的地方使用,最常见的是在使用LINQ时,因为在使用许多构成LINQ函数的扩展方法时通常会提供lambda。

在其他情况下,您可以定义接受封装逻辑或行为的Func<>Action<>参数的方法。调用者可以自由地指定特定逻辑是什么,所有被调用者都关心的是提供某种类逻辑。

答案 4 :(得分:0)

除非我遗漏了某些东西,否则后者看起来更清晰,更简单。为什么你会使用lambdas使事情变得复杂?

答案 5 :(得分:0)

第二种更有利,因为它可以用更少的代码产生相同的结果。它更易理解,更易于维护。除非你需要你没有注意到的lambda,否则我认为没有理由去使用更复杂的版本。

答案 6 :(得分:0)

使用Func方法的代码似乎只是一个概念验证,或者是lambda表达式和函数的演示;你不会在找到字符串长度这么简单的情况下使用lamdas Lamda表达式和函数比仅仅显示字符串的长度要多。

第二个是检索字符串长度的快速,相对优化的方法。

罗马不止一条路,是的,但是为什么绕过赤道可以在这里左转?