Linq选择C#和VB之间不同的编译

Linq选择C#和VB之间不同的编译,c#,vb.net,linq,C#,Vb.net,Linq,我有以下正确编译的C#代码: private string formatterCSharp(int number) { return "n" + number; } private void testInCSharp() { IEnumerable<int> list = new List<int>(); IEnumerable<string> formatted = list.Select(formatterCSharp); }

我有以下正确编译的C#代码:

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

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

    IEnumerable<string> formatted = list.Select(formatterCSharp);
}
但是,我在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.
试一试

在VB.net中,不能指定函数名以这样传递它


好的,首先,选择查询在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())

下面是正确的修复方法:Dim格式化为IEnumerable(Of String)=list.Select(Function(x)formatterVisualBasic(x))这不是我想要的语法。我不想做
Select(Function(x)someFunction(x)
,我只想做
Select(someFunction)
。安德烈上面的回答是正确的。
    Dim formatted As IEnumerable(Of String) = list.Select(Function(x As String) x = formatterVisualBasic(mynumber))
    Dim formatted As IEnumerable(Of String) = list.Select(Function(x As String) x = formatterVisualBasic())