我在C#中有一个简单的代码:
Console.WriteLine(string.Join<char>("", ""));
我无法将其转换为VB.Net。甚至反射器在VB中显示代码如下:
Console.WriteLine(String.Join(Of Char)("", ""))
但由于我有一个starge错误,因此无法编译: 错误1预期的表达式。 看起来VB.Net根本没有这种通用方法。 这两个项目都使用Net Framework 4。 为什么会发生这个错误?
UPD:
我创建了一个自定义类并将Join(Of T)声明复制到它:
Class string2
Public Shared Function Join(Of T)(ByVal separator As String, ByVal values As System.Collections.Generic.IEnumerable(Of T)) As String
Return "1"
End Function
End Class
Console.WriteLine(string2.Join(Of Char)("", ""))
它有效
UPD2:
我的编译字符串,您可以看到我正在使用Net4: http://pastebin.com/TYgS3Ys3
答案 0 :(得分:2)
String
的代码元素?根据您在此问题中添加的答案(您指出将String
更改为[String]
似乎已解决问题),我猜这可能是命名冲突的结果
我能够复制您看到的错误 - “预期表达” - 通过向我的项目String
添加模块并从内部定义(非泛型)Join
方法那个模块。
这可能不是您自己所处的特定情况。但对于我而言,代码适用于[String]
的事实对我而言是一个非常有说服力的证据,证明存在简单的命名空间冲突。
基于the documentation for the "Expression expected" error,我猜你没有包含出现此错误的整段代码。
您是否在某处有+
或=
这样的延迟操作符?
(你发布的VB.NET代码确实等同于它上面的C#代码,应该编译没问题。这就是为什么我怀疑真正的问题出在其他地方。)
答案 1 :(得分:0)
String.Join<T>(string, IEnumerable<T>)
对LINQ非常有用,因为标准连接最好使用String.Join(string, string())
重载。
答案 2 :(得分:0)
在C#中,""
作为Char产生一个空Char(\0
)。在VB中编写相同的东西(""
)会产生一个空字符串,它与空字符不同。为了产生一个空字符,你必须写New Char()
。
因此您的VB代码变为:
Console.WriteLine(String.Join(Of Char)(New Char(), New Char()))
修改
我刚检查过它,看起来是String.Join不支持您指定的格式 相反,它如下:
Join(separator As String,value As String())As String
您的代码应如下所示:
Console.WriteLine(String.Join("", New String() {""}))
答案 3 :(得分:0)
String.Join(Of Char)(str1, str2)
直到.net 4。这就是你的自定义类工作的原因 - 它有声明,但你实际使用的框架中的String类却没有。
检查您的设置和参考,以确保您的目标是.net 4 - 因为这是目前唯一能够停止呼叫工作的东西。
答案 4 :(得分:0)
这里是解决方案:
Console.WriteLine([String].Join(Of Char)("", ""))
为什么只有泛型方法才会出现此问题?我希望我知道......