C#Func <>-寻找解释-不是解决方案

时间:2019-01-17 17:01:04

标签: c#

我正在使用 Math.net,除其他我使用积分的方法外,我使用的积分函数定义为以下:

public static double IntegrateComposite(
  Func<double, double> f,
  double intervalBegin,
  double intervalEnd,
  int numberOfPartitions)

但是,我的通话语法是:

p = IntegrateComposite(
tau => MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau), 
lowLim, hiLim,  32)

我的函数最好定义为Func<double, double, double, double, double, double>,而不是上面的Func<double, double>,但一切正常 为什么?

3 个答案:

答案 0 :(得分:5)

这是您传入的函数,唯一的输入参数是tau。

tau => MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau)

其他变量r, appCfg, Ta, Daclosure“封闭”

答案 1 :(得分:2)

Func<double, double>表示

  

一个函数,它接受1个类型为double的参数,然后返回double

无论计算中涉及多少外部变量,这正是箭头函数的作用。

答案 2 :(得分:1)

Func<T1, T2, T3..., T(n), TResult>是一种类型,表示一种方法,该方法采用(n)个具有指定类型(可以为0)的参数,并返回类型为TResult的对象。

通过Func<double, double>,它指定它必须是一种以一个double作为参数并返回double的方法。

在此示例中,使用了Lambda函数(也可以由Func表示)。

tau => {return MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau)},

您传递给lambda函数的唯一参数是tau,可以在箭头的左侧看到。其他变量,例如rtauappCfg ...是捕获的变量。

另一个通用委托示例: 向(obj, e) => {Console.WriteLine(obj)}传递了两个名为obje的变量。与您的示例不同,它什么也不返回。表示为Action<T1, T2>,它表示什么都不返回的方法。