没有Linq可以使用lambdas吗?

时间:2009-11-24 17:09:40

标签: c# .net linq

如果我不需要,我宁愿不使用Linq(当我开始一个新项目时,我会删除对它的引用)。不过,Lambdas看起来很有用。我不会养成使用lambdas的习惯,但是,如果Linq必须标记为骑行。

提前致谢

5 个答案:

答案 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。