你如何加入'Collection'来制作一个字符串

时间:2014-01-10 09:25:24

标签: vb.net string

我有Sub创建Collection个服务器,每个服务器来自多行文本框的不同行。

在这个Sub的末尾,我想用多行文本框的内容替换每行修剪的文本,并删除空行。但是,我很难找到如何用集合来做这件事。

以下示例显示此错误 -

  

“Microsoft.VisualBasic.Collection”类型的值无法转换为“1维数组字符串”。

要解决这个问题,我还尝试创建一个临时的List(Of String)并将每个修剪过的服务器添加到其中,但是我得到了同样的错误。

如何有效地执行此任务?感谢。

Private Sub SetServers()

    Me.Servers = New Collection
    Dim arg() As String = {vbCrLf, vbLf, vbCr}

    For Each Server As String In Me.formServers.txtServers.Text.Split(arg, StringSplitOptions.RemoveEmptyEntries)
        Me.Servers.Add(Server.Trim)
    Next

    Me.formServers.txtServers.Text = String.Join(vbLf, Me.Servers) <-- Error here
    Me.ServersCount = Me.Servers.Count
    Call Me.ValidateServers()

End Sub

2 个答案:

答案 0 :(得分:3)

为什么要使用Collection课程?这是一个旧的VB6类仍然可用于兼容性目的有更好的工具,如List(Of String)与框架库完全集成

Dim Servers As List(Of String) 

Private Sub SetServers()
    Me.Servers = New List(Of String)
    Dim arg() As String = {vbCrLf, vbLf, vbCr}

    For Each Server As String In Me.formServers.txtServers.Text.Split(arg, StringSplitOptions.RemoveEmptyEntries)
        Server = Server.Trim
        If Not Server.Length = 0 Then Me.Servers.Add(Server)
    Next

    ' List(Of String) is accepter as parameter for the string.Join method '
    Me.formServers.txtServers.Text = String.Join(vbLf, Me.Servers)
    Me.ServersCount = Me.Servers.Count
    Call Me.ValidateServers()
End Sub

我也会尝试下面Tony Hopkinson的建议。当您通过StringSplitOptions显式删除空字符串时,为什么需要检查空字符串尚不清楚

Me.Servers = New List(Of String) (Me.formServers.txtServers.Text.Split(arg, _
                                 StringSplitOptions.RemoveEmptyEntries) _
                                 .Select(Function(x) x.Trim()))

对Split的可枚举数组结果强制修剪应该足以删除For Each循环。

然后加入你的元素再次用换行符分隔它们最好使用Environment.NewLine而不是vbLf常量

答案 1 :(得分:1)

试试这个:

...
Me.Servers = New List(of String)
...
Me.formServers.txtServers.Text = String.Join(vbLf, Me.Servers.toArray)
...