如果我不需要,我宁愿不使用Linq(当我开始一个新项目时,我会删除对它的引用)。不过,Lambdas看起来很有用。我不会养成使用lambdas的习惯,但是,如果Linq必须标记为骑行。
提前致谢
答案 0 :(得分:23)
可以随时使用Lambda。它们是一种新的语言功能。 Linq使用它们,但您不必使用linq。
Action blah = () => { System.Console.WriteLine("Hello World!"); }
blah(); // will write Hello World! to the console
答案 1 :(得分:16)
Lambda表达式完全独立于LINQ。实际上,您可以在从VS2008或VS2010定位.NET 2.0项目时使用它们。同样,如果您使用的是.NET 3.5,则可以在不使用LINQ的情况下使用表达式树 - 尽管在我的经验中这种情况并不常见。
但是,我建议你不要避免使用LINQ - 它是一个非常强大的工具。我个人略微警惕需要通过Queryable
进行翻译的LINQ提供商 - 他们更难预测 - 但LINQ to Objects是纯金。你有什么不喜欢的?请注意,您不必使用查询表达式来使用LINQ - 您可以使用lambda表达式以“点表示法”编写查询:
var query = people.Where(p => p.Age >= 18)
.Select(p => p.Name);
...所以如果查询表达式让你失望,你不需要担心它们。
编辑:只是为了反驳对问题本身的评论 - 你可以通过LINQBridge项目使用LINQ to Objects with .NET 2.0。
答案 2 :(得分:4)
了解lambda表达式的来源以及使用它们的原因非常重要。确实,大多数人通过LINQ听到lambdas,但LINQ只是实现了一个在C#语言3.0版中引入的功能,作为匿名方法的继承者(我认为)。
Lambda实际上与delegate
一起使用,当你使用lambda时,你实际在做的是为delegate
分配一个方法。但是,您可以避免使用delegate
关键字,因为编译器可以仅使用lambda表达式来推断您正在使用delegate
。
因此以下是相同的事情:
MyDel del = delegate (int x) {return x + 1;} ; // Using an anonymous method
MyDel le1 = x => x + 1; // Using a lambda expression
请记住,委托在调用之前不会执行其方法。因此,即使您在lambda表达式中看到x => x + 1
,在调用le1(someInt)
之前,实际上也不会执行此操作。您可能已经在LINQ中看到过这种情况,在调用委托之前不会执行查询。
简而言之(我不知道我的简洁),lambda允许你用shortform表示一个方法调用,而不必在你的类的主体中声明它。
我的答案来自Daniel Solis'Illustrated C# 2008,pp.375-377。
答案 3 :(得分:3)
不,你可以像匿名方法一样使用lambdas,不需要LINQ。
答案 4 :(得分:2)
Lambdas绝对可以在没有linq的情况下使用,我会一直这样做。这是我在其他地方张贴的code sample,它使用的lambda看起来没有linq。