2014-01-10 72 views
1

我有一個Sub創建一個Collection服務器,每個服務器來自多行文本框的不同行。你如何加入一個'集合'來創建一個字符串

在此Sub的末尾,我想用多行文本框中的內容替換每行上裁剪的文本,並刪除空行。然而,我正在努力找出如何用集合來做到這一點。

下面的例子yeilds此錯誤 - 的類型「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 
+1

它是強制性使用集合?這是仍然可用於兼容性目的的舊VB6對象。 Framewerk庫中有更好的工具。 – Steve

+0

'String.Join()'用於'string []'數據類型,爲了達到這個目的,'Me.Servers'必須被轉換爲一個數組字符串。 –

+0

你在連接方法上遇到什麼錯誤? –

回答

2

爲什麼使用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 

我也嘗試使用下面託尼·霍普金森建議完全集成。目前尚不清楚爲什麼你需要檢查一個空字符串時,你已明確通過StringSplitOptions

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

在斯普利特的枚舉陣列結果強制修剪去除空字符串應該足以去除For Each循環。

然後加入你的元素以新行,最好是使用Environment.NewLine代替vbLf常數再次將它們分開

+2

Me.Servers =新列表(字符串)(Me.formServers.txtServers.Text.Split(arg,StringSplitOptions.RemoveEmptyEntries)),也許。但除此之外... –

+0

好點@TonyHopkinson – Steve

+0

@Steve - 謝謝,這個作品。然而'vbLf'似乎並沒有將內容分離到新行。不是技術上的問題,但你知道我會怎麼做。另外,我還沒有意識到「Collection」已經過時了 - 我會用我的項目中的List替換它。 –

1

試試這個:

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