3

このコードをc#からvb.netに変換するのに助けが必要です。

    private static Action<int, int> TranslateOrigin(Action<int, int> f, int x, int y)
    {
        return (a, b) => f(a + x, b + y);
    }

私がインターネットで見つけた自動翻訳者はそれを台無しにして、以下を生み出します:

Private Shared Function TranslateOrigin(f As Action(Of Integer, Integer), x As Integer, y As Integer) As Action(Of Integer, Integer)
    Return Function(a, b) f(a + x, b + y)
End Function

これはコンパイルされず、「式は値を生成しない」と不平を言います。私はしばらくの間それを突っついていました、そしてそれを翻訳する運がありませんでした、どんな助けも大いにありがたいです。

4

3 に答える 3

4

値を返すのではなく、アクションを返すので、これは少し近いと思います。単一の行を使用します。

Public Shared Function TranslateOrigin(f As Action(Of Integer, Integer), x As Integer, y As Integer) As Action(Of Integer, Integer)
    Return Sub(a, b) f(a + x, b + y)
End Function
于 2012-10-23T22:56:21.917 に答える
1

これはそれを行う必要があります:

Private Shared Function TranslateOrigin(ByVal f As Action(Of Integer, Integer), ByVal x As Integer, ByVal y As Integer) As Action(Of Integer, Integer)
     Return Function (ByVal a As Integer, ByVal b As Integer) 
               f.Invoke((a + x), (b + y))
            End Function
End Function
于 2012-10-23T22:51:34.323 に答える
0

Action(Of T1, T2)デリゲートが値を返さないことをご存知ですか?とにかくそれがあなたが望むものである場合(値型ではあまり意味がありませんが)、Subを使用できます。

2つのパラメーターを持ち、値を返さないメソッドをカプセル化します。

サブを使用すると、次のコードが得られます。

Private Shared Function TranslateOrigin(f As Action(Of Integer, Integer), x As Integer, y As Integer) As Action(Of Integer, Integer)
    Return Sub(a, b) f(a + x, b + y)
End Function

おそらく値を返したいので、Func(Of T1, T2, TResult)デリゲートが必要になります。あなたの場合、それは次のようになります:

Private Shared Function TranslateOrigin(f As Func(Of Integer, Integer, Integer), x As Integer, y As Integer) As Func(Of Integer, Integer, Integer)
    Return Function(a, b) f(a + x, b + y)
End Function

以下のように呼び出すと、値が返されます6(私が予想しているように):

TranslateOrigin(Function(x, y) x + y, 1, 2)(1, 2)
于 2012-10-23T22:59:53.100 に答える