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

f()は、doubleではなくデリゲートを返すように宣言されているためです。

次のように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 に答える