C# 函数柯里化

柯里化(局部套用)定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。

public static class A
{
    public static Func<T1, Func<T2, TResult>> Currying<T1, T2, TResult>(this Func<T1, T2, TResult> func) => x1 => x2 => func(x1, x2);

    public static Func<T1, Func<T2, Func<T3, TResult>>> Currying<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> func) => x1 => x2 => x3 => func(x1, x2, x3);

    public static Func<T1, Func<T2, Func<T3, Func<T4, Func<T5, Func<T6, TResult>>>>>> Currying<T1, T2, T3, T4, T5, T6, TResult>(this Func<T1, T2, T3, T4, T5, T6, TResult> func) => x1 => x2 => x3 => x4 => x5 => x6 => func(x1, x2, x3, x4, x5, x6);

    public static void Test()
    {
        Func<int, Func<int, int>> a2 = x1 => x2 => x1 + x2;
        Func<int, int, int> b2 = (x1, x2) => x1 + x2;
        int a2Result = a2(1)(2);
        int b2Result = b2.Currying()(1)(2);

        Func<int, Func<int, Func<int, int>>> a3 = x1 => x2 => x3 => x1 + x2 + x3;
        Func<int, int, int, int> b3 = (x1, x2, x3) => x1 + x2 + x3;
        int a3Result = a3(1)(2)(3);
        int b3Result = b3.Currying()(1)(2)(3);

        Func<int, Func<int, Func<int, Func<int, Func<int, Func<int, int>>>>>> a6 = x1 => x2 => x3 => x4 => x5 => x6 => x1 + x2 + x3 + x4 + x5 + x6;
        Func<int, int, int, int, int, int, int> b6 = (x1, x2, x3, x4, x5, x6) => x1 + x2 + x3 + x4 + x5 + x6;
        int a6Result = a6(1)(2)(3)(4)(5)(6);
        int b6Result = b6.Currying()(1)(2)(3)(4)(5)(6);
    }
}

参考文章:
C#函数式编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值