将函数作为函数参数传递

时间:2015-04-27 05:50:35

标签: c#

我正在尝试将c#中的trapezodial规则作为函数实现:

Int_a^b f(x) = (b-a) * [f(a) + f(b)] / 2 

c#中是否有一个功能允许我这样编写函数?

double integrate(double b, double a, function f)
{
    return (b-a) * (f(a) + f(b)) / 2;
}

其中f可以是在另一个函数内定义的任何多项式表达式,例如:

double f (double x)
{
    return x*x + 2*x;
}

2 个答案:

答案 0 :(得分:7)

在您的情况下,您想要传递Func<double, double>。像这样

double integrate(double b, double a, Func<double, double> f)
{
    return (b-a) * (f(a) + f(b)) / 2;
}

double integrand = integrate(0, 2 * Math.PI, x => x*x + 2*x);

答案 1 :(得分:2)

您可以使用Func<>泛型类型执行此操作,其中第一个泛型表示传递的类型,第二个表示函数的返回类型:

double integrate(double b, double a, Func<double, double> f)
{
    return (b-a) * (f(a) + f(b)) / 2;
}

您的电话将如下所示:

var a = 1.0;
var b = 2.0;

var result = integrate(b, a, f);

或者如果您更喜欢lambda表达式:

var result = integrate(b, a, x => x*x + 2*x);