在VB.Net中编写String.Join(Of T)

时间:2010-08-18 08:41:06

标签: vb.net

我在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

5 个答案:

答案 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)("", ""))

为什么只有泛型方法才会出现此问题?我希望我知道......