BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

LINQ to Objects项目:EduLINQ、MoreLINQ和LINQBridge

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 李永伦 关注 0 他的粉丝 发布于 2011年3月16日. 估计阅读时间: 3 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

EduLINQ尝试解释LINQ to Objects运算符是如何工作的。MoreLINQ是一组LINQ to Objects运算符,它扩充了标准的运算符。LINQBridge把LINQ to Objects移植到.NET Framework 2.0。

Jonathan Skeet,从03年开始获得微软C# MVP称号,也是《C# in Depth》一书的作者,前不久完成了EduLINQ项目,它重新实现了LINQ to Objects,并解释LINQ方法是如何工作的。这个项目是在Apache License 2.0下发布的,附带了针对.NET Framework 3.5的源代码和单元测试。下面是Skeet从中学到的东西

  • LINQ to Objects基于扩展方法、委托和IEnumerable<T>;
  • 运算符会在合适的地方使用延迟执行,并且尽可能以流的方式传递数据;
  • 运算符不会改变原本的数据,而是返回一个新的序列,这个序列会返回相应的数据;
  • 查询表达式基于编译器的模式转换,除了相关查询表达式需要的模式之外,你不必实现其它的;
  • 迭代器代码块非常适合实现延迟执行;
  • 但会使即时验证参数成为问题;

Skeet还创建了一个名为MoreLINQ的项目,这个类库包含了21个运算符,扩充了标准的LINQ to Objects运算符。其中一些如下:

  • Batch——把源序列分割成指定大小的子序列。
  • Consume——完全使用给定的序列。这个方法使用了即时执行,并且不会在执行的时候保存任何数据。(译者注:此方法只是简单地使用foreach遍历源序列,foreach里不包含任何代码)
  • EquiZip——返回元祖(tuple)的投影(projection),每个元祖包含了每个参数序列的第N个元素。
  • MaxBy——根据给定的投影返回给定的序列的最大元素。
  • Scan——对元素序列上执行扫描(包含前缀的求和)。
  • Zip——“返回元祖的投影每个元祖包含每个参数序列的第N个元素。”(译者注:Zip方法和EquiZip方法的区别在于当两个输入序列的长度不等时,前者会以元素较少的为准,剩余的元素将被忽略,而后者将会抛出异常)

LINQBridge把LINQ to Objects移植到.NET Framework 2.0,为那些不得不使用旧版本的开发者提供LINQ的灵活和强大。


查看英文原文LINQ to Objects Projects: EduLINQ, MoreLINQ, and LINQBridge

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT