看到一篇关于C#中隐藏功能的帖子,但很多人都没有写过linq/lambdas的例子......所以......我想知道......
你见过/写过的C#LINQ和/或Lambdas /匿名代表的最酷(最优雅)是什么?
奖金,如果它也投入生产!
在LINQ光线跟踪肯定顶我的名单=)
我不太确定它是否优雅,但它肯定是我见过的最酷的linq表达式!
哦,只是非常清楚; 我并没有把它写(卢克·霍本一样)
一些基本功能:
public static class Functionals { // One-argument Y-Combinator. public static FuncY (Func , Func > F) { return t => F(Y(F))(t); } // Two-argument Y-Combinator. public static Func Y (Func , Func > F) { return (t1, t2) => F(Y(F))(t1, t2); } // Three-arugument Y-Combinator. public static Func Y (Func , Func > F) { return (t1, t2, t3) => F(Y(F))(t1, t2, t3); } // Four-arugument Y-Combinator. public static Func Y (Func , Func > F) { return (t1, t2, t3, t4) => F(Y(F))(t1, t2, t3, t4); } // Curry first argument public static Func > Curry (Func F) { return t1 => t2 => F(t1, t2); } // Curry second argument. public static Func > Curry2nd (Func F) { return t2 => t1 => F(t1, t2); } // Uncurry first argument. public static Func Uncurry (Func > F) { return (t1, t2) => F(t1)(t2); } // Uncurry second argument. public static Func Uncurry2nd (Func > F) { return (t1, t2) => F(t2)(t1); } }
如果您不知道如何使用它们,请不要做太多好事.为了了解这一点,您需要知道它们的用途:
什么是currying?
什么是y组合器?
到目前为止,我遇到的最令人印象深刻的Linq实现是Brahma框架.
它可以用于使用"Linq to GPU"将并行计算卸载到GPU.您在linq中编写了一个"查询",然后Brahma将其转换为HLSL(高级着色器语言),以便DirectX可以在GPU上处理它.
这个网站只允许我粘贴一个链接,所以尝试从dotnetrocks这个网络广播:
http://www.dotnetrocks.com/default.aspx?showNum=466
另外谷歌为Brahma项目,你会得到正确的页面.
非常酷的东西.
GJ
长期运行的LINQ查询的进度报告.在博客文章中,您可以找到一个扩展方法WithProgressReporting(),它允许您在执行时发现并报告linq查询的进度.