2016-10-04 76 views
1

之間不同的編譯我有正確編譯下面的C#代碼:適用於各LINQ的選擇C#和VB

private string formatterCSharp(int number) 
{ 
    return "n" + number; 
} 

private void testInCSharp() 
{ 
    IEnumerable<int> list = new List<int>(); 

    IEnumerable<string> formatted = list.Select(formatterCSharp); 
} 

正如你所看到的,formatted應包含list內容,與formatterCSharp

當我試圖複製在VB這個代碼,我想出了這一點:

Private Function formatterVisualBasic(ByVal number As Integer) As String 
    Return "n" + number 
End Function 

Private Sub testInVB() 
    Dim list As IEnumerable(Of Integer) = New List(Of Integer) 

    Dim formatted As IEnumerable(Of String) = list.Select(formatterVisualBasic) 
End Sub 

但是我得到在VB中Select聲明兩個編譯錯誤。

BC30455 
    Argument not specified for parameter 'number' of 'Private Function formatterVisualBasic(number As Integer) As String'. 

BC30518 
    Overload resolution failed because no accessible '[Select]' can be called with these arguments: 
     Extension method 'Public Function [Select](Of TResult)(selector As Func(Of Integer, TResult)) As IEnumerable(Of TResult)' defined in 'Enumerable': Type parameter 'TResult' cannot be inferred. 
     Extension method 'Public Function [Select](Of TResult)(selector As Func(Of Integer, Integer, TResult)) As IEnumerable(Of TResult)' defined in 'Enumerable': Type parameter 'TResult' cannot be inferred. 
+0

這是正確的修復:昏暗格式化爲IEnumerable(的字符串)= list.Select(函數(x)formatterVisualBasic(x)) – jdweng

回答

0

好第一關選擇查詢在VB.NET不同形成的,這裏是它應該是什麼樣子:

Dim formatted As IEnumerable(Of String) = list.Select(Function(x As String) x = formatterVisualBasic(mynumber)) 

其次,如果你想獲得相同的異常,因爲在C#代碼,您必須添加括號函數調用formatterVisualBasic,所以它被認爲是一個功能

Dim formatted As IEnumerable(Of String) = list.Select(Function(x As String) x = formatterVisualBasic()) 
+1

這不是我正在尋找的語法。我不想做'Select(Function(x)someFunction(X)',我只想做'Select(someFunction)',Andrey上面的答案是正確的。 –