如何创建像这样的 C# 委托双可调用对象 'f(a + k * h)'

本文关键字:对象 调用 像这样 创建 何创建 | 更新日期: 2023-09-27 18:33:26

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

现在我尝试创建一个实例以稍后传递到组件中

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

但是当我做类似的事情时:

double value = 2 * f(50);

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

为什么 - 我的遗嘱有什么问题?

如何创建像这样的 C# 委托双可调用对象 'f(a + k * h)'

使用任何类型的参数调用函数 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)();

尝试现有的 Func 委托:

Func<double, double> f = new Func<double, double>(x => x);
double value = 2 * f(50);

f 函数返回一个委托 ( DynamicFunc )。您需要通过向它传递一个双参数来调用此委托,以便获得结果:

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

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

你应该像这样声明 f:

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

然后在通话中:

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

并用以下命令调用它:

double result = SomeFunc(f);