Jon*_*eet 14
我发现LINQ to Objects在所有地方都很有用.它解决的问题非常普遍:
这是我经常遇到的情况.编程领域非常多,主要涉及将一个集合(或数据流)转换为另一个集合.在这些情况下,使用LINQ的代码几乎总是更短且更易读.我想指出LINQ不应该被认为是查询表达式的同义词 - 如果只需要一个运算符,那么正常的"点符号"(使用扩展方法)通常可以更短且更易读.
其中一个原因,我特别喜欢LINQ到对象是,它是如此普遍-而LINQ to SQL是可能只涉足数据层(或几乎成为了数据层),LINQ到对象是适用于每一个层,并在各种应用程序中.
举个例子,这是我的MiniBench基准测试框架中的一行,将TestSuite(基本上是命名的测试集合)转换为ResultSuite(命名的结果集合):
return new ResultSuite(name,
tests.Select(test => test.Run(input, expectedOutput)));
Run Code Online (Sandbox Code Playgroud)
如果ResultSuite需要针对某些特定的"标准"结果进行缩放,则再次:
return new ResultSuite(name,
results.Select(x => x.ScaleToStandard(standard, mode)));
Run Code Online (Sandbox Code Playgroud)
没有LINQ编写这段代码并不难,但LINQ只是让它更清晰,让你专注于真正的"逻辑",而不是迭代循环并将结果添加到列表等的细节.
即使LINQ本身不适用,一些主要包含在LINQ中的功能(例如隐式类型局部变量,lambda表达式,扩展方法)也非常有用.
LINQ非常适合"滑坡".想想许多常见操作涉及的内容:
Dictionary<key, List<value>>并遍历所有项目.如果没有密钥存在,则创建它,然后将项添加到适当的列表中.在每种情况下,程序方式都需要比LINQ方式更多的代码.在"if"的情况下,它更多几行; 在GroupBy或OrderBy/Then的情况下,它还有很多.
现在采取一种将它们组合在一起的常见情况.你突然想到一个10-20线的方法,可以在LINQ中用3-4线解决.LINQ版本保证更容易阅读(一旦熟悉LINQ).
那你什么时候使用LINQ?我的回答:每当你看到"foreach":)