2012-10-23 35 views
3

我需要一些幫助翻譯從C#此代碼vb.net:需要幫助翻譯功能從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 

哪些不會編譯,抱怨「表達式不生成值」。 我一直在戳它一會兒,並沒有任何運氣翻譯它,任何幫助將不勝感激。

+0

+1自動翻譯人員的lambda表達式垃圾。 – MarkJ

回答

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 
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 
+0

Stil在我的部分有錯誤。 – Styxxy

0

您知道嗎?Action(Of T1, T2) delegate不會返回值?如果它無論如何都是你想要的(儘管我沒有在其中看到很多關於值的類型),你可以使用Sub。

封裝具有兩個參數且不返回值的方法。

隨着子,這將使該代碼:

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) delegate。在你的情況,這將使:

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)