我有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
答案 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)
...