0

パラメータとして渡される計算デリゲートをいくつか書きました。

private delegate int CalculateDelegator(int value1, int value2);
CalculateDelegator addWith = add;
CalculateDelegator divWith = div;

private static int add(int value1, int value2) {
    return value1 + value2;
}

private static int div(int value1, int value2) {
    return value1 / value2;
}

link(CalculateDelegator method, int value2)パラメータとして受け取るメソッドaddWithは value1 を保持し、呼び出すメソッドlinkは value2 を保持します。そのため、常に value2 を別のパラメーターとして渡して link() を呼び出します。

最初のパラメーターを含む計算メソッドを渡す方法はありますlink(addWith(value2))か? (例えば、Scala のような部分関数として)

4

3 に答える 3

1

次のことができます。

Func<int, int> partialMethod =
    value1 => addWith(value1, 5);

このようにして、partialMethodは 1 つの引数を受け取り、それを内部の「保持された」値とともに渡します。

于 2013-07-24T11:19:23.303 に答える
1

いいえ、そのようなことは C# では直接できません。

できることは、次のようなものです。

int link(Func<int, int> addWithValue2)
{
    return addWithValue2(value1);
}

次のように呼び出します。

link(v1 => addWith(v1, value2));

ところで:あなたが説明している概念はカリー化と呼ばれ、C# に導入しようとするプロジェクトがあると思います: https://github.com/ekonbenefits/impromptu-interface/wiki/UsageCurry。基本的に、この回答に示されているアプローチを使用します。

于 2013-07-24T11:20:02.893 に答える
0

あなたの質問を理解する限り、次の拡張メソッドを作成する必要がありますint

public static LinkExtension
{
    public static void Link(this int value, CalculateDelegator method)
    {
        // Link action here
    }
}

を呼び出すだけvalue2.Link(addWith)です。

于 2013-07-24T11:25:27.990 に答える