你曾经拉过最酷的C#LINQ / Lambdas技巧吗?
看了一篇关于C#隐藏功能的文章,但并不是很多人写过linq / lambdas示例,所以......我想知道......
什么是最酷的(如最优雅的)使用C#LINQ和/或Lambdas /匿名代表你曾见过/写过的代码?
如果它已投入生产,也会获得奖励!
LINQ Raytracer当然在我的列表中排名第一)
我不太确定它是否合格,但它绝对是我见过的最酷的表情表达!
哦,而且要非常清楚; 我没有写(卢克霍班做的)
一些基本功能:
public static class Functionals
{
// One-argument Y-Combinator.
public static Func<T, TResult> Y<T, TResult>(Func<Func<T, TResult>, Func<T, TResult>> F)
{
return t => F(Y(F))(t);
}
// Two-argument Y-Combinator.
public static Func<T1, T2, TResult> Y<T1, T2, TResult>(Func<Func<T1, T2, TResult>, Func<T1, T2, TResult>> F)
{
return (t1, t2) => F(Y(F))(t1, t2);
}
// Three-arugument Y-Combinator.
public static Func<T1, T2, T3, TResult> Y<T1, T2, T3, TResult>(Func<Func<T1, T2, T3, TResult>, Func<T1, T2, T3, TResult>> F)
{
return (t1, t2, t3) => F(Y(F))(t1, t2, t3);
}
// Four-arugument Y-Combinator.
public static Func<T1, T2, T3, T4, TResult> Y<T1, T2, T3, T4, TResult>(Func<Func<T1, T2, T3, T4, TResult>, Func<T1, T2, T3, T4, TResult>> F)
{
return (t1, t2, t3, t4) => F(Y(F))(t1, t2, t3, t4);
}
// Curry first argument
public static Func<T1, Func<T2, TResult>> Curry<T1, T2, TResult>(Func<T1, T2, TResult> F)
{
return t1 => t2 => F(t1, t2);
}
// Curry second argument.
public static Func<T2, Func<T1, TResult>> Curry2nd<T1, T2, TResult>(Func<T1, T2, TResult> F)
{
return t2 => t1 => F(t1, t2);
}
// Uncurry first argument.
public static Func<T1, T2, TResult> Uncurry<T1, T2, TResult>(Func<T1, Func<T2, TResult>> F)
{
return (t1, t2) => F(t1)(t2);
}
// Uncurry second argument.
public static Func<T1, T2, TResult> Uncurry2nd<T1, T2, TResult>(Func<T2, Func<T1, TResult>> F)
{
return (t1, t2) => F(t2)(t1);
}
}
如果你不知道如何使用它们,不要做太多的事情。 为了知道这一点,你需要知道他们的用途:
到目前为止,我所见过的最令人印象深刻的Linq实现是Brahma框架。
它可用于使用'Linq to GPU'将并行计算卸载到GPU。 您在linq中编写一个'查询',然后Brahma将其转换为HLSL(高级着色语言),以便DirectX可以在GPU上处理它。
这个网站只会让我粘贴一个链接,所以请尝试从dotnetrocks这个网络广播:
http://www.dotnetrocks.com/default.aspx?showNum=466
除了Brahma项目的谷歌,你会得到正确的页面。
非常酷的东西。
GJ
链接地址: http://www.djcxy.com/p/51331.html