1

我创建了一个public delegate double DynamicFunc(double x);

现在我尝试创建它的一个实例以稍后传递给组件

    private DynamicFunc f(double x)
    {
        return (return_ => x);
    }

但是当我做这样的事情时:

double value = 2 * f(50);

我得到:错误运算符'*'不能应用于'double'和'DynamicFunc'类型的操作数;

为什么 - 我的代理有什么问题?

4

4 回答 4

2

使用任何类型的参数调用函数 f 会返回一个动态函数,而不是您可以在数学表达式中使用的值。

private DynamicFunc f(double x)
{
    return (return_ => x);
}

double value = 2 * f(50)();

但是,您是否考虑过这种替代方案?这样你就不需要委托了:

private Func<double> f(double x)
{
    return (() => return x;);
}

double value = 2 * f(50)();
于 2012-05-07T07:09:29.597 回答
2

尝试现有的 Func 委托:

Func<double, double> f = new Func<double, double>(x => x);
double value = 2 * f(50);
于 2012-05-07T07:09:39.953 回答
1

The f function returns a delegate (DynamicFunc). You need to invoke this delegate by passing it a double argument in order to get the result:

double value = 2 * f(50)(20);
于 2012-05-07T07:09:23.803 回答
1

因为 f() 被声明为返回一个委托而不是一个双精度。

你应该这样声明 f :

private double f(double x)
{
    return (return_ => x);
}

然后在通话中:

private double SomeFunc(DyanmicFunc func)
{
    return 2 * func(50);
}

并调用它:

double result = SomeFunc(f);
于 2012-05-07T07:12:38.683 回答