Func (Func Action Predicate区别和联系)
/// <summary> /// 多参递归函数 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="T1"></typeparam> /// <typeparam name="TResult"></typeparam> /// <param name="f"></param> /// <returns></returns> public static Func<T, T1, TResult> CalcuMultiArgs<T, T1, TResult>(Func<Func<T, T1, TResult>, Func<T, T1, TResult>> f) { return (x, y) => f(CalcuMultiArgs(f))(x, y); }
Lambd实现
var fn = CalcuMultiArgs<int, int, int>(f => (x, y) => { var tmpresult = x * y; if (x > 0 || y > 0) { return tmpresult + f(x - 1, y - 1); } else { return tmpresult; } }); var result = fn(3, 2); Console.WriteLine(result);