之间有什么区别
Func<string,int> returnLength;
returnLength = (string text) => { return text.Length; };
Console.WriteLine (returnLength("Hello"));
简单地
string str = "Hello";
Console.WriteLine (str.Length);
使用其中一种优势?
答案 0 :(得分:2)
lambda为您提供了一个函数,您现在可以将其传递给其他函数,而不是硬编码对Length
成员的访问。
答案 1 :(得分:2)
从技术上讲,两种选择都有效。但是,您可以出于各种原因选择一个。但是,这个对我来说似乎最重要:
简单性,可读性,可维护性 - 一些lambda表达式,尤其是LINQ表达式,比非lambda等价物更短,更易于维护。
在这种情况下,似乎lambda实际上占用的空间更多。因此,就个人而言,我更喜欢第二种选择。但是,在我的其他情况下,lambdas是更好的选择。
就性能而言:据我所知,lambdas有点慢。当然,在这种情况下,这种差异可以忽略不计。
答案 2 :(得分:2)
这个问题实际上并不是关于何时使用lambda表达式,而是在何时使用委托。答案是您使用委托作为封装行为并传递它的方式。
有用的例子:
所有这些都可以完成接口;委托在很多方面类似于单方法接口。但是,委托通常是一个更简洁的解决方案,部分原因是您可以比实现接口更灵活地创建委托,使用单个方法或使用匿名方法或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表达式和函数比仅仅显示字符串的长度要多。
第二个是检索字符串长度的快速,相对优化的方法。
罗马不止一条路,是的,但是为什么绕过赤道可以在这里左转?