当前位置:  开发笔记 > 编程语言 > 正文

LINQ到对象的何时何地使用?

如何解决《LINQ到对象的何时何地使用?》经验,为你挑选了3个好方法。

在哪些情况下我应该使用LINQ to Objects?

显然我可以在没有LINQ的情况下做任何事情.那么在哪些操作中LINQ实际上可以帮助我编写更短和/或更可读的代码?

这个问题引发了这个问题



1> Jon Skeet..:

我发现LINQ to Objects在所有地方都很有用.它解决的问题非常普遍:

您有一些数据项的集合

您需要另一个集合,由原始集合形成,但经过某种转换或过滤后.这可能是排序,投影,应用谓词,分组等.

这是我经常遇到的情况.编程领域非常多,主要涉及将一个集合(或数据流)转换为另一个集合.在这些情况下,使用LINQ的代码几乎总是更短且更易读.我想指出LINQ不应该被认为是查询表达式的同义词 - 如果只需要一个运算符,那么正常的"点符号"(使用扩展方法)通常可以更短且更易读.

其中一个原因,我特别喜欢LINQ到对象是,它如此普遍-而LINQ to SQL是可能只涉足数据层(或几乎成为了数据层),LINQ到对象是适用于每一个层,并在各种应用程序中.

举个例子,这是我的MiniBench基准测试框架中的一行,将TestSuite(基本上是命名的测试集合)转换为ResultSuite(命名的结果集合):

return new ResultSuite(name, 
    tests.Select(test => test.Run(input, expectedOutput)));

如果ResultSuite需要针对某些特定的"标准"结果进行缩放,则再次:

return new ResultSuite(name, 
    results.Select(x => x.ScaleToStandard(standard, mode)));

没有LINQ编写这段代码并不,但LINQ只是让它更清晰,让你专注于真正的"逻辑",而不是迭代循环并将结果添加到列表等的细节.

即使LINQ本身不适用,一些主要包含在LINQ中的功能(例如隐式类型局部变量,lambda表达式,扩展方法)也非常有用.



2> Dmitri Neste..:

答案几乎无处不在.更好的问题是何时使用它.



3> Paul Stovell..:

LINQ非常适合"滑坡".想想许多常见操作涉及的内容:

哪里.只写一个foreach循环和一个"if"

选择.创建目标类型的空列表,遍历原始文件,转换每个目标类型并将其添加到结果中.

OrderBy.只需将其添加到列表中并调用.Sort()即可.或实施冒泡排序;)

ThenBy(从为了通过PropertyA,然后通过PropertyB).相当难一点.自定义比较器和Sort应该可以解决问题.

GroupBy - 创建一个Dictionary>并遍历所有项目.如果没有密钥存在,则创建它,然后将项添加到适当的列表中.

在每种情况下,程序方式都需要比LINQ方式更多的代码.在"if"的情况下,它更多几行; 在GroupBy或OrderBy/Then的情况下,它还有很多.

现在采取一种将它们组合在一起的常见情况.你突然想到一个10-20线的方法,可以在LINQ中用3-4线解决.LINQ版本保证更容易阅读(一旦熟悉LINQ).

那你什么时候使用LINQ?我的回答:每当你看到"foreach":)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有