你曾经拉过最酷的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);
    }
}

如果你不知道如何使用它们,不要做太多的事情。 为了知道这一点,你需要知道他们的用途:

  • 什么是咖喱?
  • 什么是y-组合器?

  • 到目前为止,我所见过的最令人印象深刻的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

    上一篇: Coolest C# LINQ/Lambdas trick you've ever pulled?

    下一篇: Querying like Linq when you don't have Linq