Linq选择C#和VB之间不同的编译
我有以下正确编译的C#代码: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); }
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())