繁体   English   中英

这两个语句有什么区别?

[英]What's the difference between these two statements?

List<int> result1 = 
        (from number in list where number < 3 select number).ToList();

List<int> result2 = list.Where(n => n<3).ToList();

这两个不同的语句有什么区别?

没有。

第一个使用LINQ表示法,第二个使用扩展方法表示法-它们都做相同的事情。

使用任何看起来更令您满意的东西。 :)

没有区别。 一种只是看起来像SQL的语言扩展,而不是使用委托来获得相同的结果。

第一种表示法通常称为“查询语法”,第二种表示法称为“方法语法”(或点表示法或lambda语法)-两者都被编译为完全相同的代码,但是正如已经提到的,通常两者中的一种更为简洁,在大多数情况下,这是点符号,但是特别是对于多个枚举的联接或分组,查询语法确实很有用。

还要检查LINQ查询语法与方法语法(C#)

LINQ入门文档中的大多数查询都使用C#3.0中引入的声明性查询语法作为查询表达式编写。 但是,.NET公共语言运行库(CLR)本身没有查询语法的概念。 因此,在编译时,查询表达式将转换为CLR可以理解的内容:方法调用。 这些方法称为标准查询运算符,它们具有诸如Where,Select,GroupBy,Join,Max,Average等名称。 您可以使用方法语法而不是查询语法直接调用它们。

通常,我们建议使用查询语法,因为它通常更简单易读。 但是,方法语法和查询语法之间没有语义上的区别。

您已经注意到第一个是LINQ表示法,第二个使用带有lambda的扩展方法。 使用第二个代码减少代码维护。 但是如果您认为内部代码或性能的相似性,只需使用秒表并运行此代码100000次,然后选择最快的代码即可。 如果编译的代码相似,您将获得几乎相同的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM