如何创建接收c、d常量并返回Func<double, double, double>委托的方法
解决方案:利用闭包捕获常量返回委托
这问题其实用C#里的闭包就能轻松解决,正好匹配你要捕获运行时常量的需求!不用纠结四参数的方法,直接用lambda表达式结合闭包就能完美实现。
核心实现代码
// 定义一个方法,接收运行时已知的c和d,返回目标委托 public Func<double, double, double> CreateAddFunction(double c, double d) { // lambda表达式捕获外部的c和d,返回只需要a、b作为参数的函数 return (a, b) => a + b * c + d; }
怎么使用它?
当你在运行时拿到c和d的具体值后,调用这个方法就能得到你要的F(a,b)函数:
// 假设运行时获取到c=2.5,d=1.8 var myTargetFunction = CreateAddFunction(2.5, 1.8); // 调用函数计算F(a,b),比如a=3,b=4 double result = myTargetFunction(3, 4); // 计算过程:3 + 4*2.5 +1.8 = 3+10+1.8=14.8
为什么这能行?
这里用到了闭包的特性:lambda表达式会捕获CreateAddFunction方法里的c和d参数值。即使CreateAddFunction执行完毕返回,这两个值也会被保留在返回的委托里,直到这个委托被垃圾回收。因为c和d是值类型,捕获的是它们的副本,所以后续即使外部修改了同名变量,也不会影响委托里的计算逻辑,完全符合你“运行时常量”的要求。
如果用你一开始的四参数方法,反而需要额外的绑定操作(比如用Delegate.CreateDelegate或者手动封装),远不如闭包简洁直观。
内容的提问来源于stack exchange,提问作者user394334
相关产品推荐
相关产品推荐

